javascript - 目标元素点击子元素,获取父属性

标签 javascript jquery-selectors jquery

我有这个代码:

$('p', 'div.playlist').click(function(e){
  if (e.target != this) {
    val = $(this).parent().attr('songid');
  } else {
    val = $(this).attr('songid');
  }
  alert(val);
})

对应于此:

<div class="playlist">
  <p songid="1">Song Name<span class="small"> by Artist Name</span>
  </p>
</div>

我的问题是,当我单击带有艺术家姓名的范围时,它不会返回我传递给 swf 播放器以更改歌曲的 Songid 属性,这使其默认为播放列表中的第一首歌曲,但是当我单击段落标记的其余部分,它工作正常!

最佳答案

$('p', 'div.playlist').click(function(e){
  var val = $(this).attr('songid');
  alert(val);
})

由于您要绑定(bind)到 P 元素,因此您不需要检查哪个元素是 this...它始终是 p 元素。您的代码试图确定用户是否点击了 SPAN 元素或 P 元素,而上面的代码只是让点击冒泡到 P code> 元素并在那里处理它。

这是一个演示:http://jsfiddle.net/PAZTs/

如果您想禁止点击 SPAN 元素,则可以在这些元素的事件处理程序中使用 event.stopPropagation():

$('span', 'div.playlist').click(function(e){
    e.stopPropagation();
});

这是一个演示:http://jsfiddle.net/PAZTs/1/

还有一个旁注:在您的 click 事件处理程序中,您声明 val var,而不使用 var 关键字 (var val;) 将 val 变量放入全局空间,这是不必要的。

关于javascript - 目标元素点击子元素,获取父属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8650550/

相关文章:

javascript - 无法执行对 C# 方法的 Ajax 调用

javascript - 当我在 JavaScript 上单击 next 和 previous 时如何设置数组的顺序?

javascript - respond_to do |格式|在 Rails 5 应用程序中给出 "UnknownFormat in UsersController#show"

javascript - CSS JQuery 动画多个 div 在同一位置无限时间淡入淡出

javascript - 显示从 PHP 调用到 angularJS 站点的数据

javascript - ng-angular 重复过滤器等于和不等于

jquery - 使用 jquery 选择一系列 td 单元格

javascript - 如何用多个id简化JS

javascript - 基于三个下拉菜单值的 Jquery 选择器

javascript - 无法从本地主机向远程服务器发出 ajax 请求