javascript - 当只有一个对象存在时,jquery 返回两个对象

标签 javascript jquery

给定这个 HTML,

<div id="dd_container" class="dd dd_container">
 <ul class="dd_deploy">
   <li class="dd_deploy">
     more options
   </li>
  </ul>
 <ul class="dd">
   <li class="dd">
     el1
   </li>
   <li class="dd">
     el2
   </li>
   <li class="dd">
     el3
   </li>   
 </ul>
</div>​

为什么这个 jquery 函数会在控制台打印两次?

$(document).on('click','.dd_deploy', function(){
    console.log($(this).parents('.dd_container').children('ul.dd'));
});​

http://jsfiddle.net/mBPfG/

最佳答案

因为您有 2 个 .dd_deploy 元素,其中一个元素嵌套在另一个元素内,因此事件正在冒泡。

<ul class="dd_deploy">
    <li class="dd_deploy">
        more options
    </li>
</ul>

如果需要使用此 HTML 结构,则可以使用 event.stopPropagation 来防止事件冒泡,如下所示:

$(document).on('click','.dd_deploy', function(e){
    e.stopPropagation();
    console.log($(this).parents('.dd_container').children('ul.dd'));
});​

另请注意,将 $(document) 作为委托(delegate)事件处理程序上的主选择器对于性能而言并不是理想的选择。使用未动态附加到 DOM 的最近元素,而不是 document

关于javascript - 当只有一个对象存在时,jquery 返回两个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13977445/

相关文章:

javascript - 简单的 jQuery 赋值

javascript - 继续进行 JavaScript 测验中的下一个元素,因此只要完成一个元素,它就会继续进行下一个元素

javascript - 如何使用参数编写条件window.location.href

javascript - 最初设置后无法删除更改内联 CSS 或从我的 div 中删除整个样式属性

javascript - 基本 mouseMove 水平和垂直滚动

javascript - Jquery 单击另一个元素并显示选择选项

javascript - 为什么不将全局变量值传递给函数?

javascript - 为什么 CDATA 不保护我的 JavaScript 代码不受 HTML 验证器的影响?

javascript - 隐藏和显示表单(面板)onclick

jQuery如何用clone()销毁draggable