click 이벤트가 완료되기 전에 javascript/jQuery 코드를 실행할 수 있도록 체크 박스 클릭 이벤트를 방해하는 복잡한 체계가 있습니다 (예 : 상자가 선택됨).
그러나 Chrome (기본 브라우저) 및 Firefox (소수의 사용자가 사용함)에서 코드를 적용 할 때 다른 동작을 발견했습니다.
이 바이올린 example에서 일련의 이벤트는 Chrome에서 잘 작동하지만 파이어 폭스에서 동일한 이벤트를 시도하면 프로그래밍 방식 .trigger('click')
이 이벤트 리스너를 트리거하지 않습니다. 왜? 내가 봤는데 어쩌면 뭔가를 $.trigger()
방법과 함께 봤어?
내 코드 :
HTML : (jQueryUI 대화 상자를 사용하여)
<input type="checkbox" id="foo"> Clicky!
<hr>
<textarea id="bar"></textarea>
<hr>
<textarea id="cons"></textarea>
JS
$("#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>
업데이트 : Th이 내 코드를 단순화 맨손 요소와 나는 그 행동이 파이어 폭스에서 후속 .trigger ('클릭') 메소드를 깰 수있는 대화 (또는 경고 또는 모달)를 시작하는 데 특정하다는 것을 보여줄 수있다. simplified example
모두 최면술! 이것은 내가 찾고 있었던 바로 그 것입니다 - 대단히 감사합니다. 유스 케이스에 관해서는, 다소 복잡한 데 인정하지만, 아마추어 프로그래머로서의 나의 한계 내에서, 그것은 나에게 가장 어려운 해결책으로 보인다. 필자의 경우 사용자는 마우스 클릭 메뉴를 통해 내 웹 앱과 상호 작용합니다. 특정 선택 항목을 기반으로, 체크 박스 클릭 리스너가 작동 할 때 효과를 수정해야합니다. 즉, 클릭 시퀀스를 완료하고 일부 코드를 실행 중지하여 확인란을 일시 중지하는 것입니다. 나는 이것을 일반적으로하는 더 좋은 방법을 알고 싶다. – user1837608
나는 SO가 나를 허용하자마자 너의 현상금을 줄거야. – user1837608
나는 Promises를 보길 권한다 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise –