0

我有一个包含许多子跨度元素的父锚链接。当用户单击跨度时,我会执行不同的操作。

目前我简单地关闭默认点击行为,然后绑定我的自定义点击。如何将其合并为一键式功能?或者是正确的处理方式?

<a href='http://www.test.com' target='_blank'><span>Link</span> other non clickable text</a>

// Bind menu items
$('a').each(function () {
  var $item = $(this);

  // Turn off default click
  $item.click(function(){
    return false;
  });

  // Click label text
  $item.children('span').eq(0).click(function(e){
    e.preventDefault();
    e.stopPropagation();
    if($item.attr("href")) {
      //window.location = '//' + $item.attr("href");
      alert('window.location');
    }  
  });

}); // each

http://jsbin.com/oFeMIPI/2/?html,js,输出

4

3 回答 3

1

使用委托事件的另一种方法

$('a').on("click","span",function(e){
    //this now refers to the clicked span
    //do your logic here.

    return false;
});
于 2013-08-20T13:22:01.510 回答
0

尝试

$('a').click(function(e){
    var $item = $(this), $target = $(e.target);

    if($target.is('span')){
        console.log($item.attr('href'))
    }


    return false;
})

演示:小提琴

于 2013-08-20T12:57:37.337 回答
0

认为您可能想多了,只需执行以下操作:

$("a span").click(function(e) {
    e.stopPropagation(); //Stop bubbling
    e.preventDefault(); //Dont execute default link behavior

    //Log stuff that you need!
    console.log("Link: " + $(this).parent().attr("href"));
    console.log("Span Text: " + $(this).text());
});

演示:http: //jsfiddle.net/Dhne7/

于 2013-08-20T12:54:44.290 回答