【发布时间】:2013-06-13 04:25:23
【问题描述】:
当我在侧边栏选择页面时,我正在尝试使用下一个脚本加载内容。该脚本可以正常工作:
if(Modernizr.history) {
var newHash = "",
$wrapperTag = $("#main-content"),
contentTag = '#main-content-inside',
activeClass = 'active';
$("#sidebar").delegate("a", "click", function() {
_link = $(this).attr("href");
history.pushState(null, null, _link);
loadContent(_link);
return false;
});
function loadContent(href){
$wrapperTag
.find(contentTag)
$wrapperTag.load(href + " "+contentTag+" ", function(response, status, xhr) {
$("#sidebar a").removeClass(activeClass);
$('#sidebar a[href$="'+href+'"]').addClass(activeClass);
$("#menu").bind('click',function(){
$(this).showSidebar();
});
});
}
这个脚本没有问题,我的 HTML 模板看起来像这样:
HTML 模板
<div id="sidebar">
<nav>
<ul class="ul-vert">
<li><a href="page1.html">Page 1</a></li>
<li><a href="page2.html">Page 2</a></li>
...
<li><a href="pageN.html">Page N</a></li>
</ul>
</nav>
</div>
<div id="main-content">
<div id="main-content-inside">
<p id="menu">Show / Hide Sidebar</p>
<div class="text desc">(Content)</div>
</div>
</div>
我有一个标签 p#menu 作为显示或隐藏侧边栏的选项。这只是直到我加载任何页面然后我失去了 click 事件。
所以基本上我的问题是:
为什么jQuery在更改内容后会丢失事件? 我可以在 loadContent 函数上再次添加 p#menu 来解决这个问题,但我想了解 jQuery 的工作原理。
谢谢!
【问题讨论】:
-
您正在丢失
p#menu的点击事件,对吗?这就是您在load完成后绑定点击事件的原因吗? -
元素上存在点击事件。当该元素被移除/替换时,点击事件将不再存在。
-
没错。由于您替换了
main-content的内容;而p#menu本身就是它的一部分,它上面的所有事件(以及main-content中的任何元素)都将丢失。 -
当我再次绑定 p#menu 时,正在下一页中工作。每个页面都有 p#menu 和 div.text.desc 内的内容作为基本结构。但我认为它失去了内容本身!