使用AJAX将部分视图加载到页面上的对话框后,此代码位于部分本身而不是主页面中,并且我按预期获得标签:
// Run this on page load
$(function () {
debugger;
$("#ProjectTabset").tabs();
});
在这种情况下,如果包含partial的div从DOM中移除(使用jQuery remove)然后再次添加并且部分再次加载到它,它应该再次运行,但它不会。
为什么它会第一次运行,但不会随后运行?可能问题是部分插入的div是不是真的以某种方式被删除了? (虽然我测试它在创建之前不存在,但似乎它不再是DOM的一部分。)
如果我能更清楚或提供更多细节,请告诉我。)
答案 0 :(得分:0)
由于您已从DOM中删除元素并动态添加,因此如果您希望在动态添加的元素上处理事件,则可能需要通过on()使用委派事件。尝试以下内容,看看是否有帮助。
$( document ).on( 'ready', function (e) {
$("#ProjectTabset").tabs();
})
事件处理程序仅绑定到当前选定的元素;它们必须存在于您的代码调用时页面上 。上()。为确保元素存在且可以选择,请执行 事件绑定在文档就绪处理程序中的元素 页面上的HTML标记。如果新的HTML被注入到 页面,选择元素并在新HTML后附加事件处理程序 被放入页面。或者,使用委派事件来附加事件 处理程序,如下所述。
委派事件的优势在于它们可以处理来自的事件 稍后添加到文档中的后代元素。通过 选择一个保证在当时存在的元素 委托事件处理程序附加,您可以使用委托事件 避免频繁附加和删除事件处理程序。
链接here可能会帮助您解决问题。
答案 1 :(得分:-3)
您应该使用.delegate():
// Run this on page load or ajax load complete
$('body').delegate('#ProjectTabset', 'ready', function() {
$("#ProjectTabset").tabs();
});
更新:
$(document).delegate('#ProjectTabset', 'click', function() {
$('#ProjectTabset').tabs();
}
$.ajax(function(){
...
success: function(){
$('#ProjectTabset').click();
}
})