問題を説明するフィドルを次に示します。「html」要素への1つの要素のクリックでjQuery oneバインディングを追加しています。次のクリックまで「1つの」イベントハンドラーが起動するとは思っていませんが、バインディングを追加するクリックで起動します。「one」イベントハンドラーが追加されるより具体的な要素であれば、これは問題にならないようですが、「html」または「body」を要素として使用すると発生します。これは私がやりたいことです。
これは私には意味がありません。最初のクリックで次のクリックに追加され、リンクをクリックしても起動しないと思います。
ちなみに、私の実際の問題はおそらくもっと良い方法で解決できるはずですが、これに出くわして、なぜ期待どおりに機能しないのか不思議に思いました。
コード:
html:
<div id='hello'>hello</div>
<a class="title" href="#">this example</a> is a test
js:
$(function() {
$('a.title').click(function() {
var htmlClickBind = function (e) {
console.log('clicked on html, e.target = ' + e.target);
console.log(e.target == '');
if (!$(e.target).is('a') ) {
console.log('cleared click event');
}
else {
$('html').one('click', htmlClickBind);
}
};
$('html').one('click', htmlClickBind);
});
});