这段代码有什么问题吗?
$(document).ready(function() {
if($("#textbox-id-recipient").val()) {
console.log("In");
$(document).on("click", "#textbox-id-recipient", function(event) {
addEmail($(this));
});
$('#textbox-id-recipient').trigger('click');
$("#textbox-id-recipient").off("click");
}
...
});
因此,在页面刷新之后,如果文本框有东西,它将触发click事件,触发一个“on”事件,但之后它应该取消事件,但不知何故,当我手动点击文本框,on事件仍然被触发
答案 0 :(得分:3)
使用.one()
if($("#textbox-id-recipient").val()) {
console.log("In");
$("#textbox-id-recipient").one("click", function(event) {
addEmail($(this));
});
$('#textbox-id-recipient').triggerHandler('click');
}
演示:Fiddle
答案 1 :(得分:2)
将您的活动绑定到元素,而不是文档。
$('#textbox-id-recipient').on("click", function(event) {
addEmail($(this));
});
$('#textbox-id-recipient').trigger('click');
$("#textbox-id-recipient").off("click");
答案 2 :(得分:2)
查看强>
考虑这句话:
$(document).on("click", "#textbox-id-recipient", function(event) {
addEmail($(this));
});
您正在将点击处理程序绑定到document
,当点击事件从点击开始的地方一直冒出时,就会调用该处理程序。
$('#textbox-id-recipient').trigger('click');
这将模拟元素上的click事件;如果事件未被处理,jQuery会通过父项将事件冒泡到元素树中,直到它到达document
。
$("#textbox-id-recipient").off("click");
即使上面的点击触发按预期工作,.off()
也只会查看当前元素,即它不会自动“冒泡”。
备选方案1
因此,您应该在与附加它的位置相同的元素上禁用单击处理程序,即:
$(document).off("click", "#textbox-id-recipient");
顺便说一下,知道标识符必须是唯一的,您也可以直接在#textbox-id-recipient
附加>事件处理程序,除非元素只是稍后添加。
$('#textbox-id-recipient').on('click', function(event) {
});
备选方案2
此外,如果只应处理一次点击,请使用.one()
:
$('#textbox-id-recipient').one('click', function(event) {
});
或者,如果您想使用事件委托:
$(document).one('click', '#textbox-id-recipient', function(event) {
});
答案 3 :(得分:1)
尝试使用此代码删除处理程序。它应该工作:
$(document).off("click", "#textbox-id-recipient");
在这里小提琴:http://jsfiddle.net/yntyF/1/