Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery/javascript-仅当尚未分配事件处理程序时才连接事件处理程序_Javascript_Jquery - Fatal编程技术网

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

jQuery/javascript-仅当尚未分配事件处理程序时才连接事件处理程序,javascript,jquery,Javascript,Jquery,我正在为复选框分配onclick处理程序。有时,绑定事件的javascript会多次运行(在部分回发上),并且处理程序会被分配两次。如何防止处理程序被多次分配 好的,谢谢你的回复。我写了一些东西来弄清楚元素是否有一个hanlder: $.fn.hasHandler = function(eventName, handler) { var _hasHandler = false; if(handler != undefined && this.data("even

我正在为复选框分配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;
}

您可以在添加click处理程序时将类添加到复选框中,然后稍后检查该类是否存在

您还可以在添加一个click处理程序作为备选方案之前,单击该处理程序


或者,最干净的做法可能是防止代码运行两次。

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

您还可以在添加一个click处理程序作为备选方案之前,单击该处理程序

或者,最干净的做法可能是防止代码运行两次。

假设您有:

<input type="checkbox" id="myCheck" />
请参阅有关测试通过jQuery绑定的事件的更多信息

但是,您是否有理由不能使用或旧版本来允许您的处理程序绑定一次,然后对所有匹配的元素进行持久化?

假设您有:

<input type="checkbox" id="myCheck" />
请参阅有关测试通过jQuery绑定的事件的更多信息

但是,有没有原因,您不能使用或更旧的版本来允许您的处理程序绑定一次,然后对所有匹配的元素进行持久化?

您可以先解除绑定

$('#foo').unbind('click').bind('click',function(){…这里做东西…})

您可以先解除绑定


$('#foo').unbind('click').bind('click',function(){…这里做东西…})

如果您正在查看部分回发,是否因为元素已被重新创建而重新分配处理程序?在我看来,您需要稍微改进您的结构,因为在部分回发上呈现的JS代码中分配事件并不是一个好主意。我很想知道您的用例为什么不能将事件代码拉到应用程序范围的javascript?如果您正在查看部分回发,您是否因为元素已被重新创建而重新分配处理程序?在我看来,您需要稍微改进您的结构,因为在部分回发上呈现的JS代码中分配事件并不是一个好主意。我很想知道您的用例为什么不能将事件代码拉到应用程序范围的javascript?尽管
unbind(eventName)
将解除所有单击事件处理程序的绑定。如果函数存储在变量中,则可以单独解除绑定。这可能是一个更容易解决的问题,但这并不能回答我最初的问题。谢谢。尽管
解除绑定(eventName)
将解除所有单击事件处理程序的绑定。如果函数存储在变量中,则可以单独解除绑定。这可能是一个更容易解决的问题,但这并不能回答我最初的问题。不过,谢谢。仅供阅读本文的人员参考,我用最终解决方案更新了问题。仅供阅读本文的人员参考,我用最终解决方案更新了问题。