1

这段代码有什么问题吗?

$(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");
    }

...
});

所以,在页面刷新之后,如果文本框有东西,它会触发点击事件,触发一个“on”事件,但之后它应该取消事件,但是不知何故,当我手动点击文本框时,on事件仍然触发

4

4 回答 4

3

使用.one()

if($("#textbox-id-recipient").val()) {
    console.log("In");

    $("#textbox-id-recipient").one("click", function(event) {
        addEmail($(this));
    });

    $('#textbox-id-recipient').triggerHandler('click');
}

演示:小提琴

于 2013-04-30T01:00:55.887 回答
2

将您的事件绑定到元素,而不是文档。

$('#textbox-id-recipient').on("click", function(event) {
    addEmail($(this));
});

$('#textbox-id-recipient').trigger('click');

$("#textbox-id-recipient").off("click");
于 2013-04-30T00:41:27.757 回答
2

审查

考虑到这个说法:

$(document).on("click", "#textbox-id-recipient", function(event) {
    addEmail($(this));
});

您将单击处理程序绑定到document,当单击事件从单击开始的位置一直冒泡时调用该处理程序。

    $('#textbox-id-recipient').trigger('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) {
});
于 2013-04-30T01:11:20.153 回答
1

尝试使用此代码删除处理程序。它应该工作:

$(document).off("click", "#textbox-id-recipient");

在这里小提琴:http: //jsfiddle.net/yntyF/1/

于 2013-04-30T00:46:54.420 回答