首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解除jquery data.events与knockout元素的绑定

解除jquery data.events与knockout元素的绑定
EN

Stack Overflow用户
提问于 2013-12-06 02:34:29
回答 2查看 744关注 0票数 0

我在页面中使用knockout变量呈现了许多div元素,以控制每个页面显示多少div。当页面最初呈现时,我将它的值设置为5,并使用jquery hoverintent插件将mouseout事件绑定到每个div。当用户单击Show more链接时,我设置了max div t o10的值,现在显示了10个div元素,但只有前5个元素有mouseout事件绑定。如果我现在再次调用bind调用,前5个元素有2个附加到它们的事件。我可以使用以下命令查看事件的数量

代码语言:javascript
复制
$("div.ratingbig").data('events').mouseout

我的问题是如何在再次附加事件之前删除原始绑定。或者有没有一种方法可以只为新元素附加事件。

EN

回答 2

Stack Overflow用户

发布于 2013-12-06 03:05:37

要删除绑定,您需要在元素上调用jquery off,如下所示

代码语言:javascript
复制
$("div.ratingbig").off('mouseout')

您的新div没有mouseover事件的原因是它们对此一无所知

为此,您可以使用jquery延迟事件处理程序。这将在添加div时绑定一个新事件。

在生成的div周围放置一个包含元素,使用一个类似容器的类,然后在它的Event binding上运行如下所示的内容

代码语言:javascript
复制
$('div.container').on('mouseout','div.ratingbig',function(){})

这意味着当事件发生时,div.container中的每个div.ratingbing都将得到定义的回调。

或者,您可以使用knockout Event Binding将事件绑定到每个div。

就像这样

代码语言:javascript
复制
<div data-bind="foreach: listOfDivs">
    <div class="ratingbig" data-bind="event: {mouseover: $root.someJsFunctionOnYourModel}"></div
</div>

链接中的第一个示例向您展示了相当多的操作方法。

票数 1
EN

Stack Overflow用户

发布于 2013-12-06 04:33:20

我添加了以下语句,以便在添加之前从div元素中删除现有的hoverIntent,这将插入mouseout事件

代码语言:javascript
复制
       if( $(this).hoverIntent != undefined){
            $(this).unbind("mouseenter").unbind("mouseleave")
            $(this).removeProp("hoverIntent_t");
            $(this).removeProp("hoverIntent_s");
        }
        $(this).hoverIntent(configObject);

因此,每次添加悬停意图之前,它都会检查事件是否已经存在,如果存在,则首先将其删除。现在,我可以在更改knockout变量的值之后调用上面的方法,所有元素都会得到hoverIntent。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20407908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档