2011-08-25 55 views
1

我從一本書,我用來學習jQuery我修改了它一點點

<body> 
<h4><i>More</i> Mitch Hedberg Quotes</h4> 
<div> 
    <input type='submit' id='tmpQuote1' value='View Quote' /> 
</div> 
<div> 
    <input type='submit' id='tmpQuote2' value='View Quote' /> 
</div> 
<div> 
<p id="paragraph"> some text that will disappear</p> 
</div> 

$(document).ready(
function() { 
$('p').mouseover(
function(){ 
$(this).replaceWith("<p> the text changed to this text </p>"); 
} 
); 

$('input#tmpQuote1').click(
    function($e) { 
    $e.preventDefault(); 

    $(this).replaceWith(
     "<p>\n" + 
     " I would imagine that if you could understand \n" + 
     " Morse code, a tap dancer would drive you crazy.\n" + 
     "</p>\n" 
    ); 
    } 
); 

$('input#tmpQuote2').click(
    function($e) { 
    $e.preventDefault(); 

    $(this).replaceWith(
     "<p>\n" + 
     " I'd like to get four people who do cart wheels \n" + 
     " very good, and make a cart.\n" + 
     "</p>\n" 
    ); 
    } 
); 

這個HTML代碼基本上當我將鼠標懸停在末段它改變文本。 當我點擊這兩個按鈕,他們改變段落+文字。 迄今爲止很好。但是我遇到的問題是理解爲什麼當我將鼠標懸停在第一個&秒(新產生的)段落上時,鼠標懸停不起作用。 Jquery解析器中有沒有延遲?或者,也許我不知道這個$的工作原理。

感謝

回答

0

變化.click.live('click',function(){...});,你會好的。原因如上所述:事件處理程序僅添加到已存在的內容中。如果您想將其添加到您動態添加的每個內容中,則必須使用.live

+0

這一個工程謝謝 – Marin

0

您創建的功能僅適用於創建文檔時創建的所有對象。以後創建的任何事情,即動態添加,都不會得到這些事件處理程序。

也看到這個問題:click() jquery function not available on new divs

基本上,要解決這個問題,你需要使用jQuery的delegate功能,就能解決問題。

(見這裏解釋爲什麼deligate()而不是live()

+0

感謝您的評論。那麼可以通過jQuery訪問這些動態添加的元素嗎? – Marin

+0

使用.live(),而不是 –

+0

也許你應該閱讀:http://stackoverflow.com/questions/4579117/jquery-live-vs-delegate – Nayish

0

這是因爲該事件處理程序沒有簽約新<p>的單擊事件。您應該在將事件處理程序添加到文檔後手動設置事件處理程序,或者使用.live('click', function...)或更好的jQuery.livequery插件。