相关:Jquery timeout for doubleclick
鉴于此代码:
function handleClick() {
var div = $(this);
var original = $(this).html();
div.html("Tap again");
$(".onlyfire").addClass("fire").off("click");
$(".fire").one("click", function(fire) {
alert("this should not be showing once the text is changed back to original");
$(this).off("click")
});
setTimeout(function() {
$(div).html(original);
$(".onlyfire").removeClass("fire").click(handleClick);
}, 2000);
}
function onlyfire() {
$(".onlyfire").click(handleClick);
};
onlyfire();

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<div class="onlyfire">
Do Something
</div>
&#13;
从fire
之后的className
元素移除了.onlyfire
2000ms
,其中预期结果是附加到click
的{{1}}事件也会被渲染为不适用,因为.fire
中不会有.fire
元素。
然而,正如comment
指出@ 120382833点击“执行某事”,等待2秒,直到“执行某事”为止 返回,再次点击它会显示警告..它不应该......它 应该再次显示点按,只有在前2秒点击时才会显示 警报应该出现。
重现
document
; .onlyfire
元素
console
元素; .onlyfire
元素; .onlyfire
.fire
将从className
元素; .onlyfire
元素.onlyfire
元素的处理程序被调用,然后调用.fire
,但此时alert("this should not be showing once the text is changed back to original")
中不存在.fire
元素问题:这是一个jQuery错误,还是预期的行为?或者,我们是否忽略了document
中可以解释结果的内容?
答案 0 :(得分:4)
事件处理程序绑定到元素而不是它们的classNames。静态事件处理程序不像委托事件处理程序那样工作。
答案 1 :(得分:4)
这是预期的行为。
附加事件处理程序后,对该元素所做的类更改不会影响事件将触发事件处理程序的事实。该类仅在查找附加处理程序的元素时起作用。完成后,类选择器不再起作用。