取消特定元素上的事件冒泡 - javascript

时间:2010-02-26 22:19:09

标签: javascript dhtml

基本上,我想在页面上的任何地方点击,除了在输入字段和一个块级元素(通过扩展所有子节点)擦除所述输入字段。所以我在整个文档上放了一个onclick事件。为了保持上述条件,我在明确指示之前设置了条件,只有在事件不是由特定元素产生时才进行。

clearSearch = function (e){
 e ? e : e = window.event;
 e.target ? target = e.target : target = e.srcElement;
 if (target.nodeName != "INPUT" && document.getElementById('ul'))
 document.getElementById('input').value = "";
}

使用此方法,如果我想继续点击ul导致操作,我必须在此if语句中明确说明它。然后我必须对ul下的li元素做同样的事情。然后是我创造的任何其他孩子。

基本上这看起来效率很低,而且我想知道是否有人可以帮我解决我为自己创造的这个烂摊子的更好的解决方案。

1 个答案:

答案 0 :(得分:3)

您可以从clearSearch删除复杂逻辑,然后清除搜索框。然后将一些新的onClick处理程序添加到您不想调用此方法的元素。在这些处理程序中,将event.cancelBubble设置为true以防止调用clearSearch函数。

来自quirksmode

For a complete cross-browser experience do:

function doSomething(e)
{
    if (!e) var e = window.event;
    e.cancelBubble = true;
    if (e.stopPropagation) e.stopPropagation();
}