jQuery / javascript - 仅在事件处理程序尚未分配时才连接事件处理程序

时间:2011-04-06 15:13:00

标签: javascript jquery

我正在为复选框分配一个onclick处理程序。有时,执行事件绑定的javascript会运行多次(在部分回发上),并且处理程序会被分配两次。如何防止多次分配处理程序?

好的,谢谢你的回复。我写了一些东西来弄清楚元素是否有一个hanlder:

$.fn.hasHandler = function(eventName, handler)
{
    var _hasHandler = false;

    if(handler != undefined && this.data("events") !== null && this.data("events") !== undefined)
    {
        $.each(this.data("events"), function(name, handlers)
        {
            if(name === eventName)      
            {
                $.each(handlers, function(index, value)
                {
                    if(value.handler === handler)
                    {
                        _hasHandler = true;
                    }
                });
            }
        });
    }

    return _hasHandler;
}

3 个答案:

答案 0 :(得分:4)

你可以先取消绑定。

$('#foo')。unbind('click')。bind('click',function(){... do stuff here}};

答案 1 :(得分:1)

添加点击处理程序时,可以在复选框中添加一个类,然后检查是否存在该类。

您还可以unbind点击处理程序,然后再添加一个。

或者,可能最干净的事情是阻止代码运行两次。

答案 2 :(得分:1)

假设你有:

<input type="checkbox" id="myCheck" />

您的javascript可能是:

var clickFound = false;
$.each($("#myCheck").data('events'), function(i, e) {
    if(i === 'click') {
        clickFound = true;
    }
});
if(!clickFound) {
    $("#myCheck").click(function() {
       // ...
    });
}

详细了解如何通过jQuery at this question测试绑定的事件。

是否有理由,您不能使用delegate或较旧的live来允许您的处理程序绑定一次,然后为所有匹配的元素保留?