.on()
我一直在尝试找出jQuery 1.7.x 及以后版本提供的相对较新的(至少对我来说,我猜)方法。live(), bind()
到目前为止,我们一直在代码中使用来处理事件处理程序,并且由于似乎存在性能问题,我们正在考虑进行大修。.live()
所以这是我的问题。这是我的页面中的页面结构:
<div id="header"></div>
<div id="content"></div>
<div id="footer">
<div id="default"></div>
<div class="close">Close</div>
<div id="extras">//some random stuff// </div>
</div>
我创建了一个对象来存储常用的选择器,例如$(document), $("#header"), $("#footer")
:
var elements = {
$doc: $(document),
$foo: $("#footer"),
$head: $("#header")
};
.close
点击内部的预期行为#footer
是#extras
必须隐藏在视图之外。我试图将 click 事件绑定.close
到#footer
(委托),如下所示:
elements.$foo.on("click","div.close",hideFooter)
这不起作用。但是,如果一定要elements.$doc
这样:
elements.$doc.on("click", "div.close", hideFooter);
它有效。但这不就是这样.live()
吗?(如果每次点击都应该转到 DOM 开始并冒泡到div.close
)
我在这里做错了吗?
EXTRA INFO
匿名函数的内容hideFooter
是:
function hideFooter(event) {
$(event.currentTarget).next().hide("slow")
.closest("#footer").css({ "opacity": "0.8" });
$("#default").show();
}
default.js 中的代码序列
var elements = {
$doc: $(document),
$foo: $("#footer"),
$head: $("#header")
};
elements.$doc
.ready(function () {
elements.$foo.on(events.click, "div.close", hideFooter);
})
.on(events.click, "#content", HideHeaderFooter)
.on(events.hover, "#footer", showFooter);