2014-05-02 13 views
6

Kịch bản: hiển thị thông báo cảnh báo onblur (hoặc onchange) như là một phần của xác thực trường javascript.Javascript - Làm mờ hành vi của Firefox bằng cách nhấp chuột. Lỗi?

tài hành động với onblur:
1) nhấp vào bên trong đầu vào
2) nhấp vào bên ngoài đầu vào
3) đóng thông báo cảnh báo
4) di chuyển chuột xung quanh

Kết quả:mousedown dường như được thực hiện tại vị trí mà bạn đã nhấp ra trước khi cảnh báo xuất hiện - các yếu tố trên trang được chọn khi bạn di chuyển chuột xung quanh.
Lưu ý: Điều này không xảy ra khi tabbing ra khỏi đầu vào.

Demo:http://jsfiddle.net/s9sc4/

<body> 
Click inside the input and then outside of it. 
<input type="text" onblur="alert('Close this alert message and move the mouse around.');" /> 
TEST TEST TEST 
</body> 

sao chép trên:
Firefox 28 và 29 Nền tảng: Windows 7 & 8 và OSX Mavericks (4 máy khác nhau).
Sử dụng hồ sơ Firefox sạch sẽ không có sự khác biệt.

CÂU HỎI: Đây có phải là lỗi hoặc hành vi mặc định không? Chrome, Safari và IE không hoạt động như thế này.
Nếu nó được thiết kế, tôi có cần phải làm điều gì đó với ngăn chặnDefault hoặc hủy bỏ việc tạo bọt/ngừng truyền sau khi cảnh báo ngừng hành vi này không?

Trả lời

3

Bạn có thể cố gắng thêm:

window.getSelection().removeAllRanges(); 

này sẽ giải quyết vấn đề của bạn.

Để trả lời câu hỏi của bạn: đây có vẻ là a bug của FireFox và cần giải pháp thay thế. Điều gì xảy ra là FireFox đã làm sai lệch mức độ ưu tiên của các sự kiện trong đó focus được đặt trước, trước onblur. Các trình duyệt không có lỗi sẽ không kích hoạt sự kiện tiêu điểm khi onblur xảy ra.

DEMO

+0

Cảm ơn bạn - điều đó sẽ làm việc cho các ứng dụng của tôi. Tôi tự hỏi tại sao Mozilla không ưu tiên cao hơn để sửa những thứ cơ bản như thế này. –

+1

Tôi không thực sự thấy liên kết đến lỗi mà bạn đã liên kết, nhưng tôi đã gửi lỗi này dưới dạng lỗi mới, đã được xác nhận: https://bugzilla.mozilla.org/show_bug.cgi?id=1005606 Đã bị lỗi Thật không may ... –

+2

Nó hơi gián tiếp vì lỗi nói về các vấn đề 'tập trung'. Mặc dù đó là nguyên nhân gốc rễ cho vấn đề cụ thể này (imho). Sau khi tìm kiếm một số chi tiết tôi đã tìm thấy [vấn đề tương tự] (https://bugzilla.mozilla.org/show_bug.cgi?id=53579) cách hẹn hò trở lại năm 2000 và tất cả đều yêu cầu cách giải quyết tương tự.Đó là một điều tốt họ thừa nhận nó tôi đoán. –

2

Điều đó thật thú vị. Điều này giống như một con bọ. Tôi đã nhận được xung quanh nó được gọi setTimeout, và sau đó gọi alert:

<input ... onblur="setTimeout(function() { alert(...); }, 0);"> 
+0

Thank you very much. Nó hoạt động. – whitesiroi

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