Jquery .on()绑定在触发器(';创建';)后不起作用

Jquery .on()绑定在触发器(';创建';)后不起作用,jquery,jquery-mobile,Jquery,Jquery Mobile,在我正在构建的JQM(1.3.0)应用程序中,我使用“开”将所有提交按钮绑定到单击事件,目的是现在和将来所有提交按钮都将绑定此事件。我在$(document).ready()中进行这些绑定,因为我认为它只需要被调用一次…永远 我用一些内容更新JQM,并对该内容调用.trigger('create')。应该发生的是,新创建的submit按钮应该在单击时触发绑定的click事件,但它不会 下面是一个演示我试图实现的目标。在演示中,每当单击submit按钮时,消息框都应该显示“Clicked”…不幸的

在我正在构建的JQM(1.3.0)应用程序中,我使用“开”将所有提交按钮绑定到单击事件,目的是现在和将来所有提交按钮都将绑定此事件。我在$(document).ready()中进行这些绑定,因为我认为它只需要被调用一次…永远

我用一些内容更新JQM,并对该内容调用.trigger('create')。应该发生的是,新创建的submit按钮应该在单击时触发绑定的click事件,但它不会

下面是一个演示我试图实现的目标。在演示中,每当单击submit按钮时,消息框都应该显示“Clicked”…不幸的是,它只在第一个元素中出现

$(function(){
    $('input[type="submit"]').on('click', function(e){
        $('#msg').append('<div>Clicked</div>');
        $('#panel').html('<input type="submit" value="New Button">').trigger('create');
    });
});
$(函数(){
$('input[type=“submit”]”)。在('click',函数(e){
$('#msg')。追加('Clicked');
$('#panel').html('.trigger('.create');
});
});
我是否在这里错误地使用了.on()?我想我可以把我所有的绑定都塞进一个函数,然后在调用.trigger('create')时调用该函数……但这似乎效率低下。

您需要

$('#someParentElement').on('click', 'input[type="submit"]', function(e){
   //handler
});
你拥有它的方式相当于旧的

$('input[type="submit"]').bind('click', function(e){
   //handler
});

有两种方法可以使用该方法绑定事件。一种是使用事件委派,它将事件绑定到更高级别的元素(如果需要,可以一直绑定到
文档,但越近越好),然后当事件冒泡时,它将侦听它,如果它匹配传入的选择器,它将激发。使用
.on
的第二种方法是直接将其绑定到元素,而不使用委托

您正在以
的方式使用第二个版本的
。但您希望使用第一个版本(委派版本)

例如,不使用当前代码,而是执行以下操作

$(function(){
    $('#someParentElement').on('click','input[type="submit"]', function(e){
        $('#msg').append('<div>Clicked</div>');
        $('#panel').html('<input type="submit" value="New Button">').trigger('create');
    });
});
$(函数(){
$('someParentElement')。在('click','input[type=“submit”]',函数(e){
$('#msg')。追加('Clicked');
$('#panel').html('.trigger('.create');
});
});

情况并非如此。在工作中,您通常会绑定到一个(由选择器公共)父级,在这种情况下,可能是一个
表单.class
<代码>$.live
绑定到
文档
我相信,这是低效的。但问题是,如果某些选择器指定的元素冒泡(或捕获?),那么监控点击和委派就没有什么问题了。我想:(,文档说on会取代live。我该如何绑定“未来”如果他们总是以
形式插入页面加载?或
#content
?之类的内容,它就不应该像
文档
正文
那样显著地位于顶部,或者每次点击都可以评估您的
提交
选择器。我不会使用
文档
。这是低效的。哎呀-我没有注意到问题中指定了一个容器,这就是我的意思lower@JaredFarrish我最初用“低”这个词来对比“高”。谢谢,我把它放到了小提琴上,它成功了。在我的应用程序中,我需要将它移到“pageinit”以确保在重新创建整个页面时以新表单创建的输入也被绑定。再次感谢!