Javascript 如何停止事件传播?
我知道我需要使用stopPropigation,但是如何从onClick函数获取对事件的引用呢。以及如何找出事件是如何附加到元素的。我有一个简单的按钮如下:Javascript 如何停止事件传播?,javascript,jquery,Javascript,Jquery,我知道我需要使用stopPropigation,但是如何从onClick函数获取对事件的引用呢。以及如何找出事件是如何附加到元素的。我有一个简单的按钮如下: <button class="btn btn-default" onclick="addRoleToReportClicked()"> function addRoleToReportClicked() { $('#addRoleDiv').show(); } 这么简单。而且工作得很好。Unitl我刚从工作中更新了代
<button class="btn btn-default" onclick="addRoleToReportClicked()">
function addRoleToReportClicked() {
$('#addRoleDiv').show();
}
这么简单。而且工作得很好。Unitl我刚从工作中更新了代码。现在它确实显示了这个div,但是接下来要做其他事情,即重新加载整个页面
我正在使用firefox,我看到按钮现在有一个“冒泡”和“DOM0”事件处理程序。我很想知道这是如何实现的,但更重要的是,有两个问题:
$("#addRoleDivButton").unbind("click").on("click", function(e){
e.cancelBubble = true;
e.stopPropagation();
e.bubbles = false;
$('#addRoleDiv').show();
});
这一切都不起作用。考虑到表单提交的想法,我注意到页面上的所有其他按钮都可以正常工作,但这一个按钮位于from中。因此我将标记从“按钮”更改为“a”,效果很好。有人在表单标记中的每个按钮上都附加了submit()。如何停止提交?1)事件作为参数传递给回调函数
function addRoleToReportClicked(event) {
event.stopPropagation();
$('#addRoleDiv').show();
}
stopPropagation()
将阻止事件触发父元素上的回调
在某些情况下,您可能需要使用stopImmediatePropagation()
:我留给您来查找差异
请注意,您可能还希望阻止浏览器执行其默认操作:(例如,单击链接也会打开链接,单击提交按钮会发送表单)
在这种情况下,您有event.preventdefult()
编辑:
请注意,如果调用了addRoleToReportClicked
,因为
<button class="btn btn-default" onclick="addRoleToReportClicked()">
然后,事件
对象不会传递给函数
您可以删除onclick
属性
然后,如果您需要点击按钮,请使用Jquery的on('click')
2) GoogleChrome(开发工具)告诉您什么事件监听器附加到元素(只需右键单击并检查元素) 抱歉,它不会告诉您事件侦听器在代码中的何处设置 但是,如果您在源代码上全局搜索事件侦听器的名称,您应该会找到它。1)事件将作为参数传递给回调函数
function addRoleToReportClicked(event) {
event.stopPropagation();
$('#addRoleDiv').show();
}
stopPropagation()
将阻止事件触发父元素上的回调
在某些情况下,您可能需要使用stopImmediatePropagation()
:我留给您来查找差异
请注意,您可能还希望阻止浏览器执行其默认操作:(例如,单击链接也会打开链接,单击提交按钮会发送表单)
在这种情况下,您有event.preventdefult()
编辑:
请注意,如果调用了addRoleToReportClicked
,因为
<button class="btn btn-default" onclick="addRoleToReportClicked()">
然后,事件
对象不会传递给函数
您可以删除onclick
属性
然后,如果您需要点击按钮,请使用Jquery的on('click')
2) GoogleChrome(开发工具)告诉您什么事件监听器附加到元素(只需右键单击并检查元素) 抱歉,它不会告诉您事件侦听器在代码中的何处设置
但是,如果您在源代码上全局搜索事件侦听器的名称,您应该可以找到它。有很多方法可以停止冒泡,最流行的两种方法是- 停止传播-
function addRoleToReportClicked(e) {
e.stopPropagation();
$('#addRoleDiv').show();
}
或者,解除其他处理程序的绑定-
<button class="btn btn-default btn-1">
$(".btn-1").unbind("click").on("click", function(){
$('#addRoleDiv').show();
});
$(“.btn-1”).unbind(“click”).on(“click”,函数(){
$('#addRoleDiv').show();
});
有很多方法可以阻止冒泡,最流行的两种方法是-
停止传播-
function addRoleToReportClicked(e) {
e.stopPropagation();
$('#addRoleDiv').show();
}
或者,解除其他处理程序的绑定-
<button class="btn btn-default btn-1">
$(".btn-1").unbind("click").on("click", function(){
$('#addRoleDiv').show();
});
$(“.btn-1”).unbind(“click”).on(“click”,函数(){
$('#addRoleDiv').show();
});
由于您尚未接受上述任何答案,我将在此处添加此内容
function addRoleToReportClicked(event) {
$('#addRoleDiv').show();
return false;
}
通过添加返回false代码>,它应停止运行任何其他函数。如果此解决方案或任何其他解决方案不起作用,则必须有其他解决方案刷新页面
请尝试使用chrome或firefox
调试器自己调试。由于您尚未接受上述任何答案,我将在此处添加此选项
function addRoleToReportClicked(event) {
$('#addRoleDiv').show();
return false;
}
通过添加返回false代码>,它应停止运行任何其他函数。如果此解决方案或任何其他解决方案不起作用,则必须有其他解决方案刷新页面
尝试使用chrome或firefox
调试器自己调试它。可能重复我打赌这与事件传播无关,您只是提交了一个常规HTML表单。在jquery中使用unbind函数这里选择是您的元素$(“选择”)。unbind(“单击”,addroletoreport clicked())代码>昆汀,你可能是对的。。。当我点击按钮时,FF会给我一条消息,说我已经提交了某种格式的表格。。。。无论什么调用一个只显示div的函数如何,提交表单如何?可能重复我打赌这与事件传播无关,您只是提交了一个普通的HTML表单。在jquery中使用unbind函数这里选择是您的元素$(“选择”)。unbind(“单击”,addRoleToReportClicked())代码>昆汀,你可能是对的。。。当我点击