首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在父元素具有相同事件函数的子元素上触发两次单独的事件函数

问在父元素具有相同事件函数的子元素上触发两次单独的事件函数
EN

Stack Overflow用户
提问于 2015-09-09 16:13:59
回答 2查看 167关注 0票数 0

下面是我的片段,问题是,如果单击具有"test 1“文本的"li”元素,警报提示确实触发一次(正常),但如果单击具有"test 2“文本的"li”元素,则会触发两次警报提示符,类似于两次调用的click事件函数。有什么想法线索吗?

​

代码语言:javascript
复制
$(document).ready(function(){
  
  $(document).on("click", ".nav a", function(){
    
   alert("test"); 
  })
  $(document).on("click", ".dp a", function(){
    
   alert("test"); 
  })
  
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<ul class="nav">
  <li><a href="#">test 1</a></li>
  <li><a href="#">test 1</a></li>
  <li><a href="#">test 1</a>
    <ul class="dp">
      <li><a href="#">test 2</a></li>
      <li><a href="#">test 2</a></li>
    </ul>
  </li>
</ul>

​

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-09 16:16:47

使用event.stopPropagation(),它将防止任何父事件操作。

​

代码语言:javascript
复制
$(document).ready(function() {
  $(document).on("click", ".nav a", function() {
    alert("test");
  }).on("click", ".dp a", function(e) {
    e.stopPropogation();
    alert("test");
  })
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<ul class="nav">
  <li><a href="#">test 1</a>
  </li>
  <li><a href="#">test 1</a>
  </li>
  <li><a href="#">test 1</a>
    <ul class="dp">
      <li><a href="#">test 2</a>
      </li>
      <li><a href="#">test 2</a>
      </li>
    </ul>
  </li>
</ul>

​

更新:

按照the 770的建议,将事件处理程序绑定到适当的选择器以防止冒泡。

​

代码语言:javascript
复制
$(document).ready(function() {
  $(document).on("click", ".nav > li > a", function() {
    alert("test");
  }).on("click", ".dp a", function() {
    alert("test");
  })
});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<ul class="nav">
  <li><a href="#">test 1</a>
  </li>
  <li><a href="#">test 1</a>
  </li>
  <li><a href="#">test 1</a>
    <ul class="dp">
      <li><a href="#">test 2</a>
      </li>
      <li><a href="#">test 2</a>
      </li>
    </ul>
  </li>
</ul>

​

票数 1
EN

Stack Overflow用户

发布于 2015-09-09 16:19:35

指定第一个单击事件的超链接。

小提琴:https://jsfiddle.net/cshanno/Loc4427u/1/

JS

代码语言:javascript
复制
$(document).ready(function(){

  $(document).on("click", "ul:nth-child(1) > li > a", function(){

   alert("test"); 
  })
  $(document).on("click", ".dp a", function(){

   alert("test 2"); 
  })

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

https://stackoverflow.com/questions/32484559

复制
相关文章

相似问题

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