javascript - 使用新添加的类触发函数
问题描述
我试图简化它,简单到足以让我的问题更清楚。即使在 addClass 执行后,警报“我是男孩”也没有弹出。这是我的代码:
$(".first").click(function () {
var a = $(this).html();
if (a=='On') {
$(this).removeClass('first').unbind().addClass('second');
$(this).html('Off');
}
});
$(".second").click(function () {
alert('I am a boy');
});
<button class="first">On</button>
解决方案
这种行为是因为您在 DOM 加载后将类应用到元素,换句话说,是动态的。因此,附加到“.second”控件的事件侦听器不知道新添加的类,并且在单击该控件时不会触发。
要解决此问题,您只需将事件侦听器应用于父 DOM 对象,通常是 $(document) 或 $('body'),这将确保它知道任何具有动态添加的类的子对象。
正如 George Bailey 所说,您可以参考这里以获得深入的解释。
关于您的特定代码,解决方法是简单地调整它:
$(".first").click(function () {
var a = $(this).html();
if (a=='On') {
$(this).removeClass('first').unbind().addClass('second');
$(this).html('Off');
}
});
/* Changed this:
$(".second").click(function () {
alert('I am a boy');
});
*/
// To this:
$(document).on('click', '.second', function () {
console.log('I am a boy');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="first">On</button>
推荐阅读
- r - 如何在 R 中创建多个日期范围的子集
- laravel - Laravel:使用 vue js 追加
- compiler-construction - 使用 Clang 的 ASTvisitor 匹配 <= BinaryOperator
- javascript - 如何在伪元素 javascript 中检查 ::after 的存在?
- c++ - 为什么 pthread_join() 返回 0 而不是我线程的返回值?
- c++11 - 如何使用 make_unique() 为我的分数对象赋值?
- netcdf - 使用气候数据运营商 (CDO) 的每日数据得出的每月潮湿天数总和
- python - 如何在一个文件中合并多个 csv 文件包含许多工作表每张工作表用于一个 csv 文件
- python - 使用 Python 从文件夹中读取不同的音频文件格式
- swift - Back4app 与 Stripe 使用 swift iOS