2009-11-09 25 views
30

Tôi đang hiển thị hộp xác nhận JavaScript khi người dùng nhấp vào nút "Xóa dữ liệu". Tôi đang hiển thị nó như thể hiện trong hình ảnh này:JavaScript: Cách chọn "Hủy" theo mặc định trong hộp xác nhận?

alt text

Trong hình ảnh, nút "OK" được chọn theo mặc định. Tôi muốn chọn nút "Hủy" theo mặc định, để nếu người dùng vô tình nhấn phím nhập, các bản ghi sẽ an toàn và sẽ không bị xóa.

Có cách nào trong JavaScript để chọn nút "Hủy" theo mặc định không?

+7

IMHO, bạn không nên sử dụng nút OK/Hủy hoặc Có/Không trong hộp thoại. Tốt hơn hãy tạo hộp thoại của riêng bạn trong HTML và có các nút có nội dung "Xóa dữ liệu" và "Loại bỏ xóa". Bằng cách đó người dùng sẽ không phải đọc văn bản dài, chỉ có các nút. Đó là, luôn luôn bao gồm một động từ trong nhãn của một nút. –

+2

@Crescent: Lựa chọn của bạn, bạn được tự do sử dụng loại nội dung này trong ứng dụng của mình. Tôi không quan tâm, Cảm ơn. – Prashant

+0

@Markus, có nó luôn luôn tốt hơn để sử dụng hộp tin nhắn tùy chỉnh, nhưng tôi chỉ muốn biết nếu có bất kỳ cách nào để thiết lập nút mặc định trong javascript xác nhận bình thường hộp. – Prashant

Trả lời

10

Nếu bạn có thể sử dụng jQuery plugin thì đây là một đẹp một

jQuery Impromptu

Để thay đổi mặc định tập trung vào nút:

$.prompt('Example 4',{ buttons: { Ok: true, Cancel: false }, focus: 1 }); 
+0

Bất kỳ lý do nào để bỏ phiếu xuống? – rahul

+0

Một vấn đề phức tạp với giải pháp này là nó phá vỡ các quy ước giao diện người dùng nền tảng: mặc dù Windows đặt OK trước khi Hủy bỏ, hầu hết các hệ điều hành đồ họa khác có thứ tự đảo ngược. Có lẽ không phải là một thỏa thuận lớn mặc dù :) – Nick

4

Tôi không nghĩ bạn có thể làm điều đó.

Nhưng bạn chắc chắn có thể làm cho nó khó khăn hơn cho người sử dụng vô tình 'đồng ý' với sự khẳng định, ví dụ bằng cách buộc người dùng phải gõ 'y' trong một hộp đầu vào:

agree = (prompt("Type 'y' to accept", '') == 'y'); 
+4

-1 Dấu nhắc lệnh Javascript là ma quỷ. –

+2

@ josh- bạn có thể giải thích? – Yarin

+0

@Yarin Trình duyệt có các cài đặt/tùy chọn để vô hiệu hóa các lời nhắc này một cách rõ ràng. Đủ rồi. –

9

Bạn không thể làm điều đó, nhưng bạn có thể sử dụng/viết hộp thoại của riêng bạn được hiển thị bằng cách sử dụng các phần tử DOM (như phoenix đề xuất, nó không phải là plugin jQuery cụ thể, bạn có thể viết của riêng bạn hoặc sử dụng plugin từ một khung công tác JS khác).

Câu trả lời "sử dụng jQuery + plugin X" đang bắt đầu trở nên khó chịu. Có rất nhiều thư viện JS và thậm chí có nhiều plugin hơn. Ví dụ sử dụng bất kỳ thư viện JS nào ở đây là không cần thiết nếu bạn chỉ muốn hiển thị một hộp thoại tùy chỉnh. Trong khi đó là giải pháp/câu trả lời nhanh, câu trả lời giống như vậy sẽ gây hại nhiều hơn trong một thời gian dài thì tốt. Những người mới sử dụng JavaScript hoặc lập trình nói chung bắt đầu nghĩ rằng jQuery và/hoặc plugin là cách duy nhất để đi và họ bao gồm thư viện 50kb + chỉ để viết 3 dòng của riêng họ (đôi khi thậm chí không sử dụng thư viện: D).

Theo tôi, nhận xét của Markus Johnsson là câu trả lời hay nhất, thật đáng tiếc là nó không được đăng là một.

+0

Vâng nó gần như đúng, nhưng đừng quên thực tế là mỗi trình duyệt gần đây có jQuery trong bộ nhớ cache của nó. – AbiusX

+2

@AbiusX, bộ nhớ cache không được chia sẻ giữa các trang web khác nhau. Các trình duyệt cũng không thể giữ một bản sao cục bộ vì không có cách nào để chúng xác minh rằng '' thực ra là jQuery. Đúng nếu tôi sai. –

+0

+1 để tránh các plugin không cần thiết – Medorator

Các vấn đề liên quan