jQuery/javascript-仅当尚未分配事件处理程序时才连接事件处理程序
我正在为复选框分配onclick处理程序。有时,绑定事件的javascript会多次运行(在部分回发上),并且处理程序会被分配两次。如何防止处理程序被多次分配 好的,谢谢你的回复。我写了一些东西来弄清楚元素是否有一个hanlder:jQuery/javascript-仅当尚未分配事件处理程序时才连接事件处理程序,javascript,jquery,Javascript,Jquery,我正在为复选框分配onclick处理程序。有时,绑定事件的javascript会多次运行(在部分回发上),并且处理程序会被分配两次。如何防止处理程序被多次分配 好的,谢谢你的回复。我写了一些东西来弄清楚元素是否有一个hanlder: $.fn.hasHandler = function(eventName, handler) { var _hasHandler = false; if(handler != undefined && this.data("even
$.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)
将解除所有单击事件处理程序的绑定。如果函数存储在变量中,则可以单独解除绑定。这可能是一个更容易解决的问题,但这并不能回答我最初的问题。不过,谢谢。仅供阅读本文的人员参考,我用最终解决方案更新了问题。仅供阅读本文的人员参考,我用最终解决方案更新了问题。