jQuery 3.2.1 - delegate() - 动态创建按钮,委托()触发整个文档而不是元素

时间:2018-05-24 18:31:38

标签: jquery

在理解为什么会发生这种情况时遇到一些麻烦。我有一个动态创建的按钮。我需要能够单击该按钮以触发其他内容。在JQuery 3.2.1中,委托应该遵循这种格式。

DSYMM

当我点击按钮时,这实际上会触发警报()。但是,当我点击页面上的任何其他内容时,由于我猜测的$(文档)部分,它也会触发警报。

在这个版本的jQuery中是否存在delegate()的问题?绝对不可能升级jQuery版本,因此我在3.2.1版本提供的范围内工作。

思想?

2 个答案:

答案 0 :(得分:0)

delegate()已弃用3倍。 http://api.jquery.com/delegate/
您应该使用on()代替。 http://api.jquery.com/on/

$(document).on('click', 'button.new', function () {
    alert('test');
});

请注意事件的位置和子选择器的交换。

答案 1 :(得分:0)

所以它似乎按预期工作,但我必须阅读.on()的一些更精细的细节,以了解为什么这不起作用。

我最终不得不将该动态创建的按钮包装在另一个div中,然后定位包装div,而不是我在其他解决方案中找到的documentbody。否则外部元素始终是触发器而不是动态创建的按钮。

    // Button that I wanted created after another button is clicked
    resultsBtn = '<button class="btn btn-secondary see-results">See Results</button>';

    // An empty div is inserted
    btnGroup.append('<div class="btn-wrap"></div>');

    // Click event that creates the button
    btnNo.click(function(){

      // Inserting the button into the empty div
      $('.btn-wrap').append(resultsBtn);
    });

    // Targeting the button inside the empty div 
    $('.btn-wrap').on('click', seeResults, function(){
      alert('test');
    });

希望这是有道理的。