Dường như sự kiện Blur dừng trình xử lý sự kiện nhấp chuột hoạt động? Tôi có một hộp kết hợp nơi các tùy chọn chỉ xuất hiện khi trường văn bản có tiêu điểm. Chọn liên kết tùy chọn sẽ khiến sự kiện xảy ra.Sự kiện mờ dừng sự kiện nhấp chuột hoạt động?
Tôi có một ví dụ fiddle đây: http://jsfiddle.net/uXq5p/6/
Để tái sản xuất:
- Chọn hộp văn bản
- Liên kết xuất hiện
- Nhấp vào liên kết
- Các mờ thậm chí xảy ra và liên kết biến mất
- Không có gì khác xảy ra.
hành vi mong đợi:
Ở bước 5, sau khi mờ xảy ra, nhấp chuột thậm chí cũng nên sau đó lửa. Làm thế nào để tôi thực hiện điều đó?
UPDATE:
Sau khi chơi với điều này trong một thời gian, có vẻ như ai đó đã đi đến độ dài lớn để ngăn chặn một đã xảy ra-nhấp kiện khỏi bị xử lý nếu một sự kiện mờ làm cho các yếu tố nhấp UN- có thể nhấp.
Ví dụ:
$('#ShippingGroupListWrapper').css('left','-20px');
làm việc tốt, nhưng
$('#ShippingGroupListWrapper').css('left','-2000px');
ngăn chặn sự kiện click.
này dường như là một lỗi trong Firefox, kể từ khi thực hiện một yếu tố un-nhấp được nên ngăn chặn tương lai nhấp chuột, nhưng không hủy những cái đó đã xảy ra khi nó có thể được nhấp vào.
Những điều khác mà ngăn chặn sự kiện nhấp chuột từ chế biến:
$('#ShippingGroupListWrapper').css('z-index','-20');
$('#ShippingGroupListWrapper').css('display','none');
$('#ShippingGroupListWrapper').css('visibility','hidden');
$('#ShippingGroupListWrapper').css('opacity','.5');
Tôi đã tìm thấy một vài câu hỏi khác trên trang web này đang gặp vấn đề tương tự. Dường như có hai giải pháp nổi xung quanh:
Sử dụng độ trễ. Điều này là xấu bởi vì nó tạo ra một điều kiện cuộc đua giữa ẩn và xử lý sự kiện nhấp chuột. Nó cũng cẩu thả.
Sử dụng sự kiện
mousedown
. Nhưng đây không phải là giải pháp tuyệt vời vìclick
là sự kiện chính xác cho liên kết. Hành vi củamousedown
phản trực giác từ góc độ UX, đặc biệt vì bạn không thể hủy nhấp chuột bằng cách di chuyển chuột ra khỏi phần tử trước khi nhả nút.
Tôi có thể nghĩ thêm một vài điều nữa.
3.Use mouseover
và mouseout
vào liên kết để bật/tắt các sự kiện mờ cho lĩnh vực này. Điều này không hoạt động với tab bàn phím vì chuột không liên quan.
4. Giải pháp tốt nhất sẽ là một cái gì đó như:
$('#ShippingGroup').blur(function()
{
if($(document.activeElement) == $('.ShippingGroupLinkList'))
return; // The element that now has focus is a link, do nothing
$('#ShippingGroupListWrapper').css('display','none'); // hide it.
}
Thật không may, $(document.activeElement)
dường như luôn luôn quay trở lại các yếu tố cơ thể, không phải là người được nhấp. Nhưng có lẽ nếu có một cách đáng tin cậy để biết hoặc là 1. yếu tố nào bây giờ đã tập trung hoặc hai, yếu tố nào gây ra mờ (không yếu tố nào làm mờ) từ bên trong trình xử lý mờ. Ngoài ra, có bất kỳ sự kiện nào khác (ngoài mousedown
) cháy trước khi bị mờ không?
Vấn đề là sự kiện mờ được bắn trước khi nhấp chuột. Kể từ khi mờ ẩn các yếu tố đó, bạn sẽ không nhấp vào gì cả. – vcsjones
Tôi không chắc chắn việc ẩn là vấn đề. Tôi đã thử thiết lập opacity đến 50% thay vì ẩn chúng và sự kiện click vẫn không xảy ra. Vui lòng xem jsfiddle.net/75sgt/1 – Nick
Sau khi thử nghiệm thêm, đó là tính năng không có khả năng mới mà hồi tố "bỏ nhấp chuột" một phần tử đã nhấp. Xem cập nhật của tôi ở trên. – Nick