jquery off不会被触发

时间:2013-04-30 00:38:16

标签: javascript jquery events

这段代码有什么问题吗?

$(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事件仍然被触发

4 个答案:

答案 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/