我一直在試圖找出相對較新(至少對我來說,我猜).on()
提供的方法與jQuery版本1.7.x起。我們在我們的代碼中一直使用live(), bind()
來處理事件處理程序,因爲performance issues似乎有.live()
。 所以這是我的問題。這是頁面結構我在我的網頁:.on()在jQuery不能用於委託事件
<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
必須隱藏的看法。我試過的.close
click事件綁定到#footer
(委託)是這樣的:
elements.$foo.on("click","div.close",hideFooter)
沒有工作。但是,如果綁定到elements.$doc
這樣的:
elements.$doc.on("click", "div.close", hideFooter);
IT WORKS。但是,這不是如何.live()
的作品? (如果每次點擊它應該去DOM開始並且泡到div.close
)
我在這裏做錯了什麼?
EXTRA信息 匿名函數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);
當您做dom選擇時是否存在頁腳元素? '$ foo:$(「#footer」),'如果不是,則需要延遲選擇,直到元素加載完畢。 –
@ user1689607是的,它存在。 – krishgopinath
那麼,只要在代碼運行之前加載了'#footer'元素,就可以正確地執行它。需要查看更多代碼才能知道發生了什麼。 –