jQuery("a").not("div#mnuMain a").live("click", function(event){
event.preventDefault();
alert("yes I got u");
});
如何使其工作?.not()與.live()不起作用
jQuery("a").not("div#mnuMain a").live("click", function(event){
event.preventDefault();
alert("yes I got u");
});
如何使其工作?.not()與.live()不起作用
嘗試把它所有的主要選擇:
jQuery("a:not(div#mnuMain a)").live("click", function(event){
event.preventDefault();
alert("yes I got u");
});
編輯:
使用.not()
沒有工作的原因是,當你使用jQuery的live()
米ethod,你實際上並沒有在單元上放置點擊處理程序。而是將其放在文檔的根目錄下。
這是有效的,因爲頁面上的所有點擊(和其他)事件都會從實際接收事件的元素「冒泡」,一直到根,從而觸發您放置在根上的處理程序,使用.live()
。
因爲這發生在頁面上的每一次點擊,jQuery需要知道哪個項目收到點擊,因此它可以確定觸發哪個(如果有)處理程序。它使用您在撥打.live()
時使用的selector
來執行此操作。
所以,如果你這樣做:
jQuery("a").live("click", func...
...的jQuery的"a"
選擇比較每個接收到的click
事件。
所以,當你這樣做:
jQuery("a:not(div#mnuMain a)").live("click", func...
...然後jQuery使用"a:not(div#mnuMain a)"
的比較。
但是,如果你
jQuery("a").not("div#mnuMain a").live("click", func...
...選擇最終看起來像"a.not(div#mnuMain a)"
,這將不符合任何東西,因爲有的<a>
元件沒有.not
類。
我認爲有些方法可以與live()
一起使用,但.not()
不是其中之一。
如果你對你的jQuery對象的選擇器是什麼樣子感興趣,請將你的對象保存到一個變量中,將其記錄到控制檯並查看內部。你會看到jQuery使用的selector
屬性。
var $elem = jQuery("a").not("div#mnuMain a");
console.log($elem);
...應該輸出到控制檯類似:
Object
context: HTMLDocument
length: 0
prevObject: Object
selector: "a.not(div#mnuMain a)" // The selector that jQuery stored
__proto__: Object
這是輸出我從Safari瀏覽器的控制檯中看到。
jQuery("a:not(div#mnuMain a)").live("click", function(event){
event.preventDefault();
alert("yes I got u");
});
試試這個
您好....你能告訴我,爲什麼它不工作? – 2010-09-05 04:12:00
@cloudlight - 當然。我會在幾分鐘內將它發佈在我的答案中。 :o) – user113716 2010-09-05 11:51:36
非常感謝patrik dw這麼好的解釋。 – 2010-09-05 18:08:29