Javascript 单击不使用动态创建按钮触发的事件
我已经在一个div.中动态创建了按钮,并为按钮绑定了单击和其他事件。但问题是,单击事件只会为第一个单击的按钮触发一个。其他绑定事件也会发生同样的情况。示例代码是Javascript 单击不使用动态创建按钮触发的事件,javascript,jquery,Javascript,Jquery,我已经在一个div.中动态创建了按钮,并为按钮绑定了单击和其他事件。但问题是,单击事件只会为第一个单击的按钮触发一个。其他绑定事件也会发生同样的情况。示例代码是 $('#divButtons input[type=button]').each(function () { $(this).bind('mouseover', function (e) { // some work }).bind('mouseout', function (e) {
$('#divButtons input[type=button]').each(function () {
$(this).bind('mouseover', function (e) {
// some work
}).bind('mouseout', function (e) {
// some work
}).bind('click', function (e) {
// some work
});
});
在document.ready()
上绑定时效果很好,但在我的例子中,按钮是在DOM就绪之后创建的
我还想知道为什么它的行为是这样的…?如果使用jQuery 1.7+go for on(),实际上不需要每个()
用最近的非动态元素替换委托事件处理程序的文档。如果使用jQuery 1.7+go for on(),则实际上不需要每个()
将文档替换为委托事件处理程序最近的非动态元素。“在DOM就绪后很久创建的按钮”-那么该代码何时执行?在元素存在之前或添加到页面之后?当然在元素存在之后…“在DOM就绪之后创建的按钮”-那么这段代码何时执行?在元素存在之前或添加到页面之后?当然,在元素存在之后…是的,事实上,每天都会发布数千份关于这个问题的精确副本,并且它们总是以相同的方式解决,太棒了@是的,这个问题以某种形式每天出现大约50次。而且总是有很多答案只使用正则on()方法,而不是委托方式。你可能认为搜索这个网站或者阅读jQuery网站上的文档应该很容易,尽管我意识到这可能会让jQuery的新手感到困惑。@adeneo我还想知道为什么它会这样…?@Talha-它会这样,因为javascripts事件处理程序只能在绑定时对实际存在的元素进行设置。通过将事件处理程序绑定到一个存在的元素,如
document
,并侦听从较低元素冒出的事件,我们将事件处理程序“委托”到父元素,即使稍后动态添加元素,它也能工作。@adeneo我们可以使用jquery的live()吗?我用过它,它能用吗?这两者之间有什么区别?是的,事实上,每天都会有数千份关于这个问题的精确副本发布在网站上,而且它们总是以同样的方式解决,令人惊讶@是的,这个问题以某种形式每天出现大约50次。而且总是有很多答案只使用正则on()方法,而不是委托方式。你可能认为搜索这个网站或者阅读jQuery网站上的文档应该很容易,尽管我意识到这可能会让jQuery的新手感到困惑。@adeneo我还想知道为什么它会这样…?@Talha-它会这样,因为javascripts事件处理程序只能在绑定时对实际存在的元素进行设置。通过将事件处理程序绑定到一个存在的元素,如document
,并侦听从较低元素冒出的事件,我们将事件处理程序“委托”到父元素,即使稍后动态添加元素,它也能工作。@adeneo我们可以使用jquery的live()吗?我用过它,它能用吗?这两者有什么区别?
$(document).on({
mouseover: function(e) {
// some work
},
mouseout: function(e) {
// some work
},
click: function(e) {
// some work
}
}, '#divButtons input[type=button]');