javascript - 当我更改 innerHtml 时, Bootstrap 选项卡事件不再起作用

标签 javascript jquery html twitter-bootstrap

这是我的 HTML 代码:

<ul class="nav nav-tabs">
    <li class="active"><a href="#menu1" data-toggle="tab">menu1</a></li>
    <li><a href="#menu2" data-toggle="tab">menu2</a></li>
</ul>

这是我更改 innerHTML 的 javascript 代码:

document.body.innerHTML = document.body.innerHTML.replace( text1, text2 );

这是我处理事件的 jquery 代码:

$('a[data-toggle="tab"]').on( 'shown.bs.tab', function (e) { 
    alert('test');
}); 

运行更改innerHTML的java代码时,tab事件不再起作用

最佳答案

问题是,当您替换内部 html 时,您已绑定(bind)事件处理程序的所有元素都将被销毁,并创建新元素,其中没有添加任何事件处理程序。

这种方法还有其他问题,因为在这些元素上初始化的任何插件也会被销毁,因此它们也将无法工作。

因此正确的解决方案是遍历每个目标元素,然后替换必要的内容。

至于单独考虑事件处理程序,您可以使用event delegation , 但 Bootstrap 插件可能仍然无法工作,因为在新元素中插件未初始化。

document.body.innerHTML = document.body.innerHTML.replace(text1, text2);
$(document.body).on('shown.bs.tab', 'a[data-toggle="tab"]', function (e) {
    alert('test');
});

关于javascript - 当我更改 innerHtml 时, Bootstrap 选项卡事件不再起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29505761/

相关文章:

Javascript 将时区 Z 转换为 +0000 时刻

javascript - 自动完成,自动更正在使用 cordova 或 javascript 的 android 4.4 中不起作用

html - IE7 div 边框打印问题

html - 保持元素以百分比作为位置固定

javascript - 用 iframe 替换超链接

javascript - 如何用 Javascript 替换文本区域中选定的文本?

javascript - 当子组件更改数据库时响应父组件更新

javascript - 使用jquery了解选择表单中未选择的值

jquery - 如何使这两个按钮具有相同的宽度?

javascript - 从右到左和从下到上滚动的插件