Javascript 使用新添加的类触发函数
我试着简化它,简单到让我的问题更清楚。 即使在执行addClass之后,也没有弹出“我是个男孩”的警报。 这是我的密码:Javascript 使用新添加的类触发函数,javascript,jquery,Javascript,Jquery,我试着简化它,简单到让我的问题更清楚。 即使在执行addClass之后,也没有弹出“我是个男孩”的警报。 这是我的密码: $(“.first”)。单击(函数(){ var a=$(this.html(); 如果(a=='On'){ $(this.removeClass('first').unbind().addClass('second'); $(this.html('Off'); } }); $(“.second”)。单击(函数(){ 警惕(“我是个男孩”); }); On传递给$的函数。p
$(“.first”)。单击(函数(){
var a=$(this.html();
如果(a=='On'){
$(this.removeClass('first').unbind().addClass('second');
$(this.html('Off');
}
});
$(“.second”)。单击(函数(){
警惕(“我是个男孩”);
});代码>
On
传递给$的函数。post
直到稍后才会运行(回调)。因此,在您尝试选择该类之后,将添加该类。在回调中执行此操作,方法与添加类的方法相同(您不需要选择该类,只需使用$this
)此行为是因为您在加载DOM后将类应用于元素,换句话说,是动态的。因此,附加到“.second”控件的事件侦听器不知道新添加的类,并且在单击该控件时不会激发
要解决此问题,只需将事件侦听器应用于父DOM对象,通常为$(document)或$('body'),这将确保它知道任何动态添加类的子对象
正如乔治·贝利(George Bailey)所说,你可以参考一个深入的解释
对于您的特定代码,修复方法是简单地将其调整为:
$(“.first”)。单击(函数(){
var a=$(this.html();
如果(a=='On'){
$(this.removeClass('first').unbind().addClass('second');
$(this.html('Off');
}
});
/*更改为:
$(“.second”)。单击(函数(){
警惕(“我是个男孩”);
});
*/
//为此:
$(文档).on('click','second',函数(){
console.log(“我是个男孩”);
});代码>
在
可能重复的问题上,您是说新添加的类
还是带有特定类的元素
,您应该同时添加相关的HTML
。也添加相关的HTML@不是评论,只是修改你原来的问题。同时整理代码缩进,甚至更好地将代码片段转换为可用代码。你能为用户提供的帮助越多,你就越有可能得到一个好的答案。我不太理解你的答案,但为了简单起见,我编辑了这个问题。你能帮我查一下吗?哦…现在,我更明白了,我会通过链接了解更多,非常感谢你的贡献,这是一个成功。