开发者问题收集

我的 jQuery .click 事件发生错误,因为它内部有一个 click() 事件

2016-06-10
1142

我有一个外部 div,里面有两个按钮。当单击外部 div 时,我希望它单击其中的两个按钮。

当我尝试执行此操作时,浏览器控制台中出现以下错误:

Uncaught RangeError: Maximum call stack size exceeded

这是我的代码:

jQuery( "#boz .wrapper1" ).click(function() {
    jQuery('button.select1', this).click();
    jQuery('button.submit', this).click();
});

我尝试以各种方式使用 event.stopPropagation() 函数,但问题仍然存在。

jQuery( "#boz .wrapper1" ).click(function( event ) {
        jQuery('button.select1', this).click();
        event.stopPropagation();
        jQuery('button.submit', this).click();
        event.stopPropagation();
});

更新 基本标记是:

<div id="boz">
    <div class="wrapper">
        <div class="image"><img src="example.jpg" alt="example"></div>
        <div class="desc">Lorem Impsum</div>
        <div class="actions">
            <div class="other-stuff">Blah Bla Blah</div>
            <button class="select1">Click Me</button>
            <button class="submit">Submit Me</button>                
        </div>
    </div>
    <div class="wrapper">
        <div class="image"><img src="example.jpg" alt="example"></div>
        <div class="desc">Lorem Impsum</div>
        <div class="actions">
            <div class="other-stuff">Blah Bla Blah</div>
            <button class="select1">Click Me</button>
            <button class="submit">Submit Me</button>                                
        </div>
    </div>
    <div class="wrapper">
        <div class="image"><img src="example.jpg" alt="example"></div>
        <div class="desc">Lorem Impsum</div>
        <div class="actions">
            <div class="other-stuff">Blah Bla Blah</div>
            <button class="select1">Click Me</button>
            <button class="submit">Submit Me</button>                                
        </div>
    </div>
</div>
3个回答

您需要在按钮的点击处理程序中使用 stopPropagation 。因为这会阻止事件再次到达原始 div。如果到达,它将再次触发按钮点击,因此链会继续,并发生 stack size beyond 错误。

jQuery( "#boz .wrapper1" ).click(function( event ) {
        jQuery('button.select1', this).click();
        // event.stopPropagation(); not required here
        jQuery('button.submit', this).click();
        // event.stopPropagation(); not required here
});

jQuery('button.select1').click(function(e){
  e.stopPropagation(); // need to use it here
});//click

jQuery('button.submit').click(function(e){
  e.stopPropagation(); // need to use it here
});//click
Mohit Bhardwaj
2016-06-10

您没有尝试使用 trigger 方法吗?

jQuery( "#boz .wrapper1" ).click(function( event ) {
    jQuery('button.select1', this).trigger('click');
    jQuery('button.submit', this).trigger('click');
});

另一个提示可能是在按钮点击处理程序本身中添加 event.stopPropagation(); ,以防止冒泡到父 div。

最后,实际的父 div 应该是获取事件的 div 吗?您始终可以使用另一个 div 来完成工作,并使用 css 属性将其定位为预期位置。

Dfaure
2016-06-10

尝试这样使用,

jQuery( "#boz .wrapper1" ).click(function( e ) {
   e.preventDefault();
   jQuery('button.select1, button.submit').trigger('click');
});
Samir
2016-06-13