Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery触发器单击触发器两次_Javascript_Jquery_Ajax_Click - Fatal编程技术网

Javascript jQuery触发器单击触发器两次

Javascript jQuery触发器单击触发器两次,javascript,jquery,ajax,click,Javascript,Jquery,Ajax,Click,我有一个签出表单,当页面加载时,它使用php将一些javascript和html加载到#Div-a。javascript将单击事件绑定到同一div中的#Button-a。类似如下: <div id="#Div-A"><input type="button" id="Button-A"/> <script type="text/javascript"> $('#Button-A').bind('click', function() { $.aja

我有一个签出表单,当页面加载时,它使用php将一些javascript和html加载到
#Div-a
。javascript将单击事件绑定到同一div中的
#Button-a
。类似如下:

<div id="#Div-A"><input type="button" id="Button-A"/>
<script type="text/javascript">
    $('#Button-A').bind('click', function() {
    $.ajax({ 
        type: 'get',
        url: 'some/url/gets/called',
        success: function() { this happens on success }     
    });
});</script>
</div>
$('#Global-Button').live('click', function(event) {
    $("#Button-A").trigger("click");
})
原因是
#Div-A
的内容可以更改(通过ajax),因此第二个按钮充当全局触发器,而不管哪个按钮或函数恰好位于
#Div-A

我遇到的问题是,出于某种原因,如果在页面加载
#按钮-A
触发两次后单击“全局”按钮,则会触发两次。如果Ajax事件重新加载#Div-A的内容,那么一切正常,触发器只会按其应该的方式发生一次

在通过Ajax重新加载之前和之后,我检查了
#Div-A
中的html,所有内容看起来都是一样的。在我看来,任何地方都绝对没有会触发两个事件的重复按钮或功能


我对DOM知之甚少,只能猜测这与加载内容和绑定事件的顺序有关。

不要使用
.live
。不推荐使用。请改为使用

每次单击#Blobal按钮时,您都在等待一次单击事件。因此,您需要在使用它之前关闭它

用于删除事件处理程序

$('#Global-Button').off('click');
$('#Global-Button').on('click', function(event) {
    $("#Button-A").trigger("click");
})

通常建议在绑定之前使用“取消绑定”,以确保事件不会被多次绑定。在您的情况下,可能有两种可能性:

  • “#全局按钮”单击函数绑定两次
  • “#按钮-A”单击功能绑定了两次,而“#全局按钮”实际上触发了一次单击
  • 更改您的代码,如-

    $('#Global-Button').unbind('click').bind('click', function(event) {
        $("#Button-A").trigger("click");
    })
    
    以及

    $('#Button-A').unbind('click').bind('click', function() {
        $.ajax({ 
            type: 'get',
            url: 'some/url/gets/called',
            success: function() { this happens on success }     
        });
    });
    
    你也可以使用

     $(".selector").on("click", function (**e**) {
      **e**.stopImmediatePropagation();//use to stop click twice or more
    })
    

    我知道on(),但尽管这是一个很好的建议,但没有帮助。谢谢。第二位$('#Button-A').unbind('click').bind('click',function(){成功了。结果表明,使用appendTo()重新定位按钮正在创建重复绑定。我想知道是否有办法避免在无序排列元素时出现这种情况还有另一个选项,您可以在查询中使用非单一结果。例如,我在使用复选框时遇到了这种情况:框架生成隐藏的
    输入
    ,而当我对
    输入[name=“myname”]进行汇总时
    将是唯一的,它不是真的。它节省了我的时间。谢谢。e有什么用?以前从未见过?只是提请注意我猜的参数?在我的情况下,出于某种原因e.stopImmediatePropagation()不起作用,但e.preventDefault()起作用谢谢提示