我在页面中使用knockout变量呈现了许多div元素,以控制每个页面显示多少div。当页面最初呈现时,我将它的值设置为5,并使用jquery hoverintent插件将mouseout事件绑定到每个div。当用户单击Show more链接时,我设置了max div t o10的值,现在显示了10个div元素,但只有前5个元素有mouseout事件绑定。如果我现在再次调用bind调用,前5个元素有2个附加到它们的事件。我可以使用以下命令查看事件的数量
$("div.ratingbig").data('events').mouseout我的问题是如何在再次附加事件之前删除原始绑定。或者有没有一种方法可以只为新元素附加事件。
发布于 2013-12-06 03:05:37
要删除绑定,您需要在元素上调用jquery off,如下所示
$("div.ratingbig").off('mouseout')您的新div没有mouseover事件的原因是它们对此一无所知
为此,您可以使用jquery延迟事件处理程序。这将在添加div时绑定一个新事件。
在生成的div周围放置一个包含元素,使用一个类似容器的类,然后在它的Event binding上运行如下所示的内容
$('div.container').on('mouseout','div.ratingbig',function(){})这意味着当事件发生时,div.container中的每个div.ratingbing都将得到定义的回调。
或者,您可以使用knockout Event Binding将事件绑定到每个div。
就像这样
<div data-bind="foreach: listOfDivs">
<div class="ratingbig" data-bind="event: {mouseover: $root.someJsFunctionOnYourModel}"></div
</div>链接中的第一个示例向您展示了相当多的操作方法。
发布于 2013-12-06 04:33:20
我添加了以下语句,以便在添加之前从div元素中删除现有的hoverIntent,这将插入mouseout事件
if( $(this).hoverIntent != undefined){
$(this).unbind("mouseenter").unbind("mouseleave")
$(this).removeProp("hoverIntent_t");
$(this).removeProp("hoverIntent_s");
}
$(this).hoverIntent(configObject);因此,每次添加悬停意图之前,它都会检查事件是否已经存在,如果存在,则首先将其删除。现在,我可以在更改knockout变量的值之后调用上面的方法,所有元素都会得到hoverIntent。
https://stackoverflow.com/questions/20407908
复制相似问题