Tôi có một lược đồ phức tạp để làm gián đoạn sự kiện nhấp chuột, vì vậy tôi có thể chạy một số mã javascript/jQuery trước khi sự kiện nhấp được hoàn thành (ví dụ: hộp được chọn).
Nhưng, tôi đã nhận thấy một số hành vi khác nhau khi áp dụng mã trong Chrome (trình duyệt cơ sở của tôi) và Firefox (được sử dụng bởi một nhóm nhỏ người dùng của tôi).
Trong fiddle example, chuỗi các sự kiện này hoạt động tốt trong Chrome, nhưng nếu bạn thử tương tự trong firefox, chương trình .trigger('click')
không kích hoạt trình xử lý sự kiện. Tại sao? Tôi đã googled nó và có lẽ một cái gì đó để làm với phương pháp $.trigger()
?
Mã của tôi:
HTML:
<input type="checkbox" id="foo"> Clicky!
<hr>
<textarea id="bar"></textarea>
<hr>
<textarea id="cons"></textarea>
JS (sử dụng hộp thoại jQueryUI)
$("#dialog").dialog({
autoOpen: false
});
$("#foo").on('mousedown', function(e) {
e.preventDefault(); // stop mousedown propagation
$("#foo").prop('checked', false).prop("disabled", true); // disable checkbox from checking
if (!$("#foo").is(":checked")) { // if not checked, run script
// Open a modal while checkbox event is paused
$("#dialog").dialog('open').dialog({
title: "Hey! Here is a modal",
modal: 'true',
buttons: {
"OK": function() {
// run a script while modal running during checkbox pause
$("#bar").val("checkbox paused, script run");
// release checkbox disable &
// programmatically complete the check
$("#foo").prop('disabled', false);
$("#foo")[0].click();
// This click event completes and the click listener fires below in Chrome, but not on firefox? Why oh why?
$("#dialog").dialog('close');
}
}
});
}
});
$("input:checkbox").on("click", function() {
$("#cons").val("check completed!");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<input type="checkbox" id="foo"> Clicky!
<hr>
<textarea id="bar"></textarea>
<hr>
<textarea id="cons"></textarea>
<div id="dialog">
A modal opens
</div>
Cập nhật: tôi đơn giản hóa mã của tôi để th e yếu tố trần và tôi có thể chứng minh hành vi cụ thể để tung ra các hộp thoại (hoặc cảnh báo hoặc bất kỳ phương thức), mà phá vỡ tiếp theo .trigger ('click') phương pháp trong firefox. simplified example
Tất cả các mưa đá thôi miên !! Đây chính xác là những gì tôi đang tìm kiếm - cảm ơn bạn rất nhiều. Đối với trường hợp sử dụng, tôi thừa nhận nó có phần phức tạp, nhưng trong giới hạn của tôi như là một lập trình viên hobbyist, nó có vẻ là giải pháp khắc nghiệt nhất đối với tôi. Trong trường hợp của tôi, người dùng của tôi sẽ tương tác với ứng dụng web của tôi thông qua trình đơn nhấp chuột. Dựa trên một số lựa chọn trước đó, tôi cần phải sửa đổi hiệu ứng khi người xem nhấp vào hộp kiểm của tôi kích hoạt - đó là lý do tôi tạm dừng hộp kiểm bằng cách tắt -> chạy một số mã -> hoàn tất chuỗi nhấp chuột. Tôi rất muốn biết cách tốt hơn để làm điều này một cách tổng quát. – user1837608
Tôi sẽ tặng tiền thưởng của bạn ngay khi SO cho phép tôi. – user1837608
Tôi khuyên bạn nên xem Promises: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise –