2011-11-03 36 views
0

我有一个点击绑定为元素的直播。处理程序返回执行后假的,但如果元素恰好是一个一个标记,然后将链接也没有得到遵守,这是不可接受的......jquery live在A标签上返回false

$('*').live('click', function(){ 
    // lots of code here 
    return false; 
}); 

现在,如果被点击的元素有一个路径像A>img,并且图像被点击,A将永远不会被跟踪。我不希望点击事件进一步传播。

我该如何做到这一点?

编辑:

我的应用程序将事件绑定到*是至关重要的。此外,点击可以在任何元素上进行,而不仅限于A。因此,上述解决方案都不适合我希望达到的目标。

+0

你的代码返回false末所以没有动作将被执行,你正在执行它到所有元素'*' – run

回答

0

我不会点击功能绑定到*。你可以将它绑定到body元素;点击将从被点击的元素传播到body元素。您可以查看最初点击这样的元素:

$("body").live("click", function (e) { 
    if ($(e.originalEvent.target).is("a")) { 
     return false; 
    } 
}); 

说了这么多,你还可以这样做:

$("*").live("click", function() { 
    if ($(this).is("a") == false) { 
     return false; 
    } 
}); 
0

尝试:

if($(this).tagName == 'A') 
    return true; // perhaps even { do nothing } 
else 
    return false; 

这可能不是确切的代码来获得标记名,看到这个How to extend jQuery to make it easier to retrieve the tagName

也看到这一点:http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/

+1

this.tagName或this.nodeName将足够 – jerjer

+0

请参阅“所以你真的想要什么?”下的stopPropagation()小节。在我放在那里的第二个环节。我认为这可能是你正在寻找的东西,但正如Bryan Ross所说,你可能不想附加到每个DOM对象上。谢谢你清理那个,jerjer。 –

2

你在找什么是preventDefault()

$('*').live('click', function(e){ 
    // lots of code here 
    e.preventDefault(); 
    return false; // Don't think this is necessary 
}); 

我还想说一个事件附加到所有元素可能不是一个好主意。

你会被连接到A标签而得到更好的服务:

$('a').click(function(e){ 
    // lots of code here 
    e.preventDefault(); 
    return false; 
});