在理解为什么会发生这种情况时遇到一些麻烦。我有一个动态创建的按钮。我需要能够单击该按钮以触发其他内容。在JQuery 3.2.1中,委托应该遵循这种格式。
DSYMM
当我点击按钮时,这实际上会触发警报()。但是,当我点击页面上的任何其他内容时,由于我猜测的$(文档)部分,它也会触发警报。
在这个版本的jQuery中是否存在delegate()的问题?绝对不可能升级jQuery版本,因此我在3.2.1版本提供的范围内工作。
思想?
答案 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,而不是我在其他解决方案中找到的document
或body
。否则外部元素始终是触发器而不是动态创建的按钮。
// 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');
});
希望这是有道理的。