2015-12-02 120 views
0

力顺序也许一个愚蠢的问题,但...jQuery的委托()/上() - 事件

在这个简单的代码:

$(".Q").on("click", ".container", containerClick); 
$(".Q").on("click", ".container .oneElement", oneElementInContainerClicked); 

如果.oneElement在.container被点击时,第一oneElementInContainerClicked被调用。

是有可能迫使事件的顺序,使得containerClick首先被调用,然后oneElementInContainerClicked

+0

_“是有可能迫使事件的顺序,使得containerClick首先被调用,然后oneElementInContainerClicked”两个单击处理_预计结果被称为? – guest271314

+0

一种方法可能是从所需顺序的'oneElementInContainerClicked'内手动调用'containerClick'(或者* it *调用的逻辑),然后停止事件传播,而不调用其他处理程序。 – David

+0

这个概念被称为事件捕获..http://stackoverflow.com/questions/17249125/event-capturing-jquery –

回答

1

尝试,包括检查中containerClicke.target;呼吁$(this).parents(".container").trigger("click")oneElementInContainerClicked

function containerClick(e) { 
 
    if (e.target.className !== "oneElement") 
 
    console.log("container") 
 
} 
 

 
function oneElementInContainerClicked() { 
 
    console.log("oneElement"); 
 
    $(this).parents(".container").trigger("click") 
 
} 
 

 

 
$(".Q").on("click", ".container", containerClick); 
 
$(".Q").on("click", ".container .oneElement", oneElementInContainerClicked);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 
 
</script> 
 
<div class="Q"> 
 
    <div class="container">container 
 
    <div class="oneElement">oneElement</div> 
 
    </div> 
 
    </div>

+0

@GregBala请注意,在重新阅读问题时,出现'$(this).parents(“。container”)。trigger(“单击“)'应该在console.log(”oneElement“);'oneElementInContainerClicked'内部调用以返回预期结果? – guest271314