3

我有几个列表项,当我单击希望浏览器重定向到“.title > a”链接(href)的项目时。但我不希望“notThis”选择器上有任何事件。

参见示例 http://jsfiddle.net/VTGwV/29/

<div class="item">
<div class="title">
    <a href="www.jsfiddle.net">jsfiddle.net</a>     
</div>
<div> djføljdsaføljdsf a</div>
<div> djføljdsaføljdsf a</div>
<div> djføljdsaføljdsf a</div>
<div class="notThis">
    <a href="/test.html">link1 </a>
    <a href="/test2.html">link2</a>                
</div>

​</p>

脚本

​$(document).on('click', '.item', function(event) {
    window.location.href = $(event.currentTarget).find('.title > a').attr('href');        
});​

我试过 :not('.notThis') 没有任何运气。

更改 感谢所有答案,但我发现了另一个问题。如果我对整个项目有一个事件处理程序,我无法点击“notThis”选择器中的链接,因为它只返回“false”。没有办法使用 .not / :not 与 $(document).on('click', --------)

4

3 回答 3

18

可以测试点击事件是否来源于.notThis元素内部(或者元素本身):​</p>

$(document).on('click', '.item', function(event) {
    if($(event.target).closest('.notThis').length > 0) {
        return false; // if you want to ignore the click completely
        // return; // else
    }
    window.location.href = $(event.currentTarget).find('.title > a').attr('href');
});​

我也认为你可以使用this而不是event.currentTarget.

于 2012-06-15T12:36:23.823 回答
0

您的语法错误,只需像这样使用选择器:

例子

$("div.item > div:not(.notThis)").click(function(){
    window.location.href = $(this).find('.title > a').attr('href');
});
于 2012-06-15T12:40:32.633 回答
0

http://jsfiddle.net/Lcg49/4/

var clickable = $('.item').find('div').not('.notThis');

$(clickable).on('click', function(event) {
    alert($(this).parent().find('.title a').attr('href'));
});
于 2012-06-15T12:41:42.747 回答