Javascript 为什么我需要使用stopPropagation()?
我不明白stopPropagation做什么。为什么我需要在这段代码中使用stopPropagation()?。如果我不使用它,回车键第一次就不起作用了。代码如下:Javascript 为什么我需要使用stopPropagation()?,javascript,jquery,Javascript,Jquery,我不明白stopPropagation做什么。为什么我需要在这段代码中使用stopPropagation()?。如果我不使用它,回车键第一次就不起作用了。代码如下: $(文档).ready(函数(){ $(“#搜索词”)。按键(功能(e){ 如果(e.which==13){ $(“#搜索”)。单击(); **e、 停止传播()** 返回false; } }); $(“#搜索”)。单击(函数(){ var searchTerm=$(“#searchTerm”).val(); 变量url=”http
$(文档).ready(函数(){
$(“#搜索词”)。按键(功能(e){
如果(e.which==13){
$(“#搜索”)。单击();
**e、 停止传播()**
返回false;
}
});
$(“#搜索”)。单击(函数(){
var searchTerm=$(“#searchTerm”).val();
变量url=”https://en.wikipedia.org/w/api.php?action=opensearch&search=“+searchTerm+”&format=json&callback=?”;
$.ajax({
键入:“获取”,
url:url,
async:false,
数据类型:“json”,
成功:功能(数据){
对于(var i=0;i
”+data[3][i]+”
“+data[2][i]+””);
}
},
错误:函数(错误消息){
警报(错误消息);
}
});
});
});
所以你点击一个按钮(它有一个点击处理程序),它就在一个div里面(它有自己的点击处理程序)
由于事件传播或冒泡,两个事件处理程序都将启动。事件从最初创建它们的元素开始,并继续向下传递,直到它们到达根。防止这种情况发生的唯一方法是使用Event.stopPropagation(),这本质上意味着——不要再调度事件
希望这能有所帮助……所以你点击一个按钮(它有一个点击处理程序),它在一个div中(它有自己的点击处理程序)
由于事件传播或冒泡,两个事件处理程序都将启动。事件从最初创建它们的元素开始,并继续向下传递,直到它们到达根。防止这种情况发生的唯一方法是使用Event.stopPropagation(),这本质上意味着——不要再调度事件
希望这有助于…以下是我编写的一些代码,以便尝试了解事件侦听器和传播在DOM中的工作方式 概念性的,概念性的。我如何想象代码在引擎盖下工作: 交互式代码笔。单击嵌套的div以查看eventObject如何在DOM中冒泡。取消对javascript中第15行的注释,以查看停止事件传播如何影响事件的冒泡。 如果结构是:
button = {
tagName: 'button',
id: 'myButton',
click: function(event) {
console.log(event.currentLocation);
},
parentNode: //points to the div object that contains this button element
}
parentNode
的属性
button.parentNode = {
tagName: 'div',
id: 'myDiv',
click: function(event) {
console.log('this event is being fired in the ' + event.currentLocation.id + ' element' );
},
parentNode: // some other div that contains this div
} //object (node) that contains the button element
click
属性,则该函数也会传递事件对象并激发。然后,代码查找该元素的父元素并重复该过程,直到到达DOM的根(根元素没有父节点,因此代码将停止在那里查看)单击
方法,然后停止查看其他父元素对象是否具有单击
方法下面是我编写的一些代码,目的是试图了解事件侦听器和传播在DOM中是如何工作的 概念性回复。我如何想象代码在引擎盖下工作: 交互式代码笔。单击嵌套div查看eventObject如何在DOM中冒泡。取消javascript中第15行的注释,查看停止事件传播如何影响事件冒泡。 如果结构是:
button = {
tagName: 'button',
id: 'myButton',
click: function(event) {
console.log(event.currentLocation);
},
parentNode: //points to the div object that contains this button element
}
parentNode
的属性
button.parentNode = {
tagName: 'div',
id: 'myDiv',
click: function(event) {
console.log('this event is being fired in the ' + event.currentLocation.id + ' element' );
},
parentNode: // some other div that contains this div
} //object (node) that contains the button element
click
属性,则该函数也会传递事件对象并激发。然后,代码查找该元素的父元素并重复该过程,直到到达DOM的根(根元素没有父节点,因此代码将停止在那里查看)单击
方法,然后停止查看其他父元素对象是否具有单击
方法stopPropagation阻止进一步处理按键事件。如果不这样做,它可能会触发表单提交,从而取消javascript过程。您是否查找过它,或者为什么我不需要在$(“#搜索”)中使用它。单击(函数(){};可能是因为事件是否在该元素上传播无关紧要?为什么不触发表单提交???StopRopagation会阻止进一步处理按键事件。如果不这样做,它可能会触发表单提交,从而取消javascript过程。您有没有查过它,或者为什么我不需要告诉我们将它放在$(“#search”)中。单击(function(){};可能是因为事件是否在该元素上传播并不重要