2010-06-04 75 views
1

這裏是我的代碼:jQuery - 似乎無法將.live()綁定到標籤元素。爲什麼?

HTML:

<ul id="more-items"> 
    <li><label class="button">hi</label></li> 
    <li><label class="button">hi</label></li> 
    <li><label class="button">hi</label></li> 
</ul> 

的Javascript:

$('ul#more-items label.button').live('click', function() 
{ 
    alert(1); 
}); 

點擊標籤不會引起警報()開火。 .live()綁定似乎對標籤元素沒有任何影響...

如果我將其更改爲使用.click()或甚至.bind(),則它可以很好地工作。 .live()不工作有什麼原因嗎?有沒有辦法來解決這個問題?

我使用.live()的原因是因爲ul#more-items將被多次讀入頁面,我不想在每次發生重新綁定點擊時都必須觸發一個函數。

+2

你真的不能指望什麼** **,如果你共享多個元素之間的相同的「ID」值工作。 – Pointy 2010-06-04 02:33:11

回答

0

嘗試

$('label.button').live('click', function() 
{ 
    alert(1); 
}); 

$('ul#more-items').delegate('label.button','click', function() 
{ 
    alert(1); 
}); 
+0

剛剛試過兩個都沒有工作 – dave 2010-06-04 02:38:26

0

似乎不錯,但你的警告,應警惕( 「1」);

或:

var 1 =「1」;

alert(1);

+1

嗯......真的嗎?嚴重??? – Reigel 2010-06-04 02:30:49

+0

警報(1)有效。在地址欄中測試javascript:alert(1)。你會看到它正確地提醒號碼1. – 2010-06-04 02:31:33

+0

@Reigel,我可以錯了嗎? :([@John Hartsock,humm ... tks for the head's up :)] – Zuul 2010-06-04 02:32:26

1

元素ID必須是唯一的。你stament「我使用.live(的原因)是因爲UL#更項目將被重新添加到頁面多次。」告訴我,你就會有這些多:

<ul id="more-items"> 
    <!--Stuff--> 
</ul> 
<ul id="more-items"> 
    <!--Stuff--> 
</ul> 

這無效的HTML作爲ID more-items存在兩次。

+0

忘記我多次閱讀UL我正在編寫HTML>。<將它改爲現在的類。不過,不能解決.live()問題。 – dave 2010-06-04 02:34:09

+0

你也改變了選擇器嗎? 'ul.more-items label.button'(將「#」更改爲「。」) – Pointy 2010-06-04 02:42:20

-1

你的代碼適合我。你使用的是哪個版本的jquery?你在$(document).ready函數中定義了javascript嗎?

+0

是的,我在$(document).ready函數中獲得了我的代碼。我正在使用:http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js – dave 2010-06-04 02:41:02

6

jQuery的live()方法依賴於事件冒泡(一直到根節點)工作。

如果有任何代碼可以阻止事件在label或其任何祖先上冒泡,live()將不起作用。

label或其祖先之一的任何機會有以下任一處理程序?

return false; 

event.stopPropagation(); 

如果是這樣,live()將失敗。


相關jQuery的文檔:

+0

我只是偶然發現了這個問題。我的標籤有一個綁定到他們的插件,返回false。原因是.click()函數(綁定到標籤)會觸發兩次,除非返回false。請參閱:http://groups.google.com/group/jquery-en/browse_thread/thread/af789262532a4c68 – dave 2010-06-04 02:52:12

+1

這樣做。 'return false;'會導致冒泡停止,所以位於DOM樹根部的處理程序永遠不會收到通知。我假設這些元素是動態添加的。如果是這樣,當你創建元素時,你應該能夠使用'bind'而不是'live'。那麼沒有問題。 – user113716 2010-06-04 02:55:11

0

你可以試試這個。它可能工作

變化:

$('ul#more-items label.button').live('click', function() 
{ 
    alert(1); 
}); 

這樣:

$('ul#more-items label.button').unbind('click').live('click', function() 
{ 
    alert(1); 
}); 
相關問題