どこかをクリックしてトリガされたワンタイムイベントを作成したいとします。このイベントは、ボタンをクリックすると作成されます。ボタンをクリックしたときにイベントがトリガーされることはなく、その後の任意のクリック(ボタンを含む)だけが発生します。setTimeoutとイベントの伝播
だから私は、次のような一部のHTML持っていると言う:私はイベントの伝播を停止しないようにしたい
$('#btn').click(function() {
$(document).one('click', function() {
console.log('triggered');
});
});
$('#someparent').click(function() {
// this must always be triggered
});
が、上記で:
<body>
<div id="someparent">
<div id="btn"></div>
</div>
</body>
そして、次のJavaScript(jqueryのを)たとえば、イベントはドキュメントにバインドされ、イベントがバブルアップし、イベントがトリガされます。この問題を解決するために
一つの方法は、タイムアウトでイベント作成をラップするように思わ:
今$('#btn').click(function() {
setTimeout(function() {
$(document).one('click', function() {
console.log('triggered');
});
}, 1);
});
$('#someparent').click(function() {
// this must always be triggered
});
、これは正常に動作しますが、私は、これは安全であるかどうかと思いまして。実行命令のいくつかの概念は、これが常に機能することを保証しているのですか、それとも偶然に作用していますか?他のソリューション(別のネストされた.one()
イベント)があることはわかっていますが、特にsetTimeoutとイベントの伝播がどのように相互運用するかの答えを探しています。
以下のフィドルは、2つのdivを示しています。最初のものは間違った動作をします(ドキュメントイベントがすぐにトリガされます)。第二のdivをクリックして、ドキュメントの任意の場所(白い部分)に希望の挙動を示しています
https://jsfiddle.net/Lwocuuf8/7/
あなたはクリックイベントを配線し、イベントをしたら、単純にハンドルを削除することはできません(ソースがボタンでない限り)トリガーされましたか? –
あなたは何を意味するのか分かりませんか? – jkgeyti
は、バブリングを防ぐためにfalseを返すだけです。 – TecHunter