javascript - jquery .delegate 和动态内容

标签 javascript jquery

我必须遵循 HTML:

<ul class="ulclass">
   <li class="liclass">
      ...some more nesting
           <a href="somelink">somelink</a>
      ....close nesting
   </li>
   <li class="liclass">
   ...

</ul>

“liclass”类中的每个 li 上都有一个点击事件,因此我使用以下命令停止 anchor 冒泡(大概 <div> 在 .liclass 内部):

$(".liclass div").delegate("a", "click", function(e) {
          e.stopPropagation();        
});

现在我添加更多<li class="liclass">使用 Ajax .load。 stopPropagation 适用于静态“.liclass”,但不适用于动态添加的。 假设代码为<ul class="ulclass">页面加载时存在。 您能否让我知道如何更改 .delegate 以阻止动态添加的 .liclass 冒泡。

最佳答案

将另一个委托(delegate)处理程序放置在包含动态创建元素的任何位置(在本例中为 ul),以停止传播。

$("ul.ulclass").delegate(".liclass div", "click", function(e) {
          e.stopPropagation();        
});

$("ul.ulclass").delegate(".liclass", "click", function(e) {
          // main code for each li element    
});

因为它们都是同一元素上的委托(delegate)方法,所以即使事件已经冒泡,e.stopPropagation() 也应该能够阻止处理程序。

<强> JSFIDDLE DEMO

更新了演示以展示其如何使用动态元素。

<小时/>

另一种方法是将处理程序直接绑定(bind)到动态创建的 div 元素。

因此,如果您使用 .load(),我假设您正在清除旧内容并用新内容替换它。在这种情况下,在回调中,只需选择 div,然后重新绑定(bind)处理程序。

$("ul.ulclass").load('/whatever/', function() {
      // shortcut to binding a handler with stopPropagation and preventDefault
    $(this).find('li.liclass div').bind('click', false);
});

关于javascript - jquery .delegate 和动态内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8375574/

相关文章:

javascript - 将一个 "bigger"ul 的底部与另一个的底部对齐

javascript - 为什么 Dreamweaver 显示此脚本行的语法错误?

javascript - 有条件地包含浏览器脚本

asp.net - 如何使用 jQuery/JSON/AJAX 将字符串传递到 ASP.NET Web 服务

javascript - 在 div 中输出,在数组中打印对象,但第一个答案是 "Undefined"。 - Javascript

javascript - jQuery 验证和提交表单

javascript - Angular uiRouter 在新窗口或带有 stateParams 的选项卡中打开状态

javascript - 在 else block 内有一个 if - else block 是最佳实践吗

jquery - 多个页面上相同的 <div>

javascript - jQuery获取并响应html,之后的POST问题