Javascript 如何停止事件传播?

Javascript 如何停止事件传播?,javascript,jquery,Javascript,Jquery,我知道我需要使用stopPropigation,但是如何从onClick函数获取对事件的引用呢。以及如何找出事件是如何附加到元素的。我有一个简单的按钮如下: <button class="btn btn-default" onclick="addRoleToReportClicked()"> function addRoleToReportClicked() { $('#addRoleDiv').show(); } 这么简单。而且工作得很好。Unitl我刚从工作中更新了代

我知道我需要使用stopPropigation,但是如何从onClick函数获取对事件的引用呢。以及如何找出事件是如何附加到元素的。我有一个简单的按钮如下:

<button class="btn btn-default" onclick="addRoleToReportClicked()">
function addRoleToReportClicked() {
    $('#addRoleDiv').show();
}
这么简单。而且工作得很好。Unitl我刚从工作中更新了代码。现在它确实显示了这个div,但是接下来要做其他事情,即重新加载整个页面

我正在使用firefox,我看到按钮现在有一个“冒泡”和“DOM0”事件处理程序。我很想知道这是如何实现的,但更重要的是,有两个问题:

  • 如何在addRoleToReportClicked()函数中停止此操作?(我假设我可以停止传播,但如何获得事件的句柄

  • 有什么简单的方法可以找到添加这些事件侦听器的代码吗?我尝试了调试,但没有显示任何内容。我不想通过20+js文件和数千行代码来找到它。但我确实想找到开发人员并枪毙他

  • 更新

    我试过这个:

        $("#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())昆汀,你可能是对的。。。当我点击