$(document).on('click',selector,function())结合:not

时间:2012-06-15 12:32:35

标签: javascript jquery

我有几个列表项,当我点击项目时我希望浏览器重定向到“.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>

脚本

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

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

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

3 个答案:

答案 0 :(得分:18)

您可以测试点击事件是否来自.notThis元素(或元素本身):

$(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

答案 1 :(得分:0)

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

示例

$("div.item > div:not(.notThis)").click(function(){
    window.location.href = $(this).find('.title > a').attr('href');
});

答案 2 :(得分: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'));
});