Sửa
Để ngăn chặn cả hai sự kiện từ bắn, bạn sẽ phải bằng cách nào đó đánh dấu phần tử trước khi làm cho nó mất tập trung. Bằng cách đó, trình xử lý sự kiện blur
của bạn có thể cho biết sự kiện đó có phải là chủ đề của một khóa hoặc nếu nó bị mất tập trung một cách hợp pháp. Một cái gì đó như thế này:
$(".textbox").live("blur",function (event) {
if (!$(this).hasClass('keyupping'))
alert("blur Event fired");
});
$(".textbox").live("keyup",function (event) {
$(this).addClass('keyupping');
if(event.keyCode == 13){ // Detect Enter
alert("KeyUp fired after pressing Enter");
}
$(this).removeClass('keyupping');
});
Hãy thử nó ra: http://jsfiddle.net/GRMule/sR6zm/
Original câu trả lời
Khi sự kiện cho keyup
hỏa hoạn, nó chuẩn bị để vẽ hộp thoại cảnh báo trình duyệt, trong đó có tập trung từ tài liệu và áp dụng nó cho hộp thoại phương thức. Điều này gây ra sự kiện mờ để kích hoạt.
Sự kiện blur
sau đó nhảy vào và hoàn thành ngữ cảnh thực thi trước keyup
biết điều gì đã xảy ra.
này được chứng minh bằng cách sử dụng một cái gì đó không mất sự tập trung ra ngoài yếu tố, như console.log
: http://jsfiddle.net/GRMule/7vRLW/
Trình tự các sự kiện cháy là thực hiện cụ thể, có nghĩa là bạn không thể dựa vào Firefox diễn xuất như IE. Xem thông số: http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-eventgroupings. Hãy thử các fiddle với cảnh báo trong IE, và trong trường hợp này bạn sẽ thấy rằng blur
không trúng trước khi keyup
trong IE 7 - và blur
không cháy trong Chrome!
Nguồn
2012-06-21 16:59:22
Vậy ai nói rằng 'blur' KHÔNG NÊN bắn? Lưu ý: 'live()' không được chấp nhận, mặc dù thực tế này không liên quan gì đến vấn đề của bạn ở đây. – kapa
thử 'bấm phím' thay thế 'khóa và sử dụng' on' thay vì 'sống' – Dhiraj
Xin chào, đây là câu hỏi thích hợp. Vui lòng mở lại. Đó là một vấn đề thực sự tôi chỉ có, phải có được keyup để làm việc trước khi làm mờ. –