2011-08-31 28 views
3

好的,所以我想在搜索結果中做所有問題的反面。大多數人想要阻止jQuery嵌套div或什麼,因爲.load()方法最終被多次調用。我想從同一個腳本中多次觸發jQuery .load()

我想每次點擊某物時調用.load()。麻煩的是,我選擇的id鏈接被.load()取代。我在第一次調用.load()時在innerHTML插入的鏈接上包含了相同的id。 jQuery不會爲後續點擊選擇新填充的ID,即使它現在再次在DOM中。

主頁:

<div id="#replace_me"> 
    <p>some stuff</p> 
    <a id="click_me">A LINK</a> 
</div> 

<script type="text/javascript"> 
    $('#click_me').click(function() { 
     $('#replace_me').load('new.html'); 
    }); 
</script> 

NEW.HTML:

<p>some new stuff that actually is dynamic and changes periodically</p> 
<a id="click_me">A LINK</a> 

爲了簡便起見,我不會去到爲什麼我就是不離開這個鏈接外的更換,但現實是,它需要消失並用.load()方法回來。

回答

2

使用.delegate,它允許將事件處理程序附加到基於根特異性元件上的元件(#click_me)(#replace_me):

$("#replace_me").delegate("#click_me", "click", function() { 
    $('#replace_me').load('new.html'); 
}); 

實施例:http://jsfiddle.net/ATyUq/

.delegate通常是由於this answer中概述的原因,比.live更好的選擇。

1

您可以使用Live功能:

$('#click_me').live('click', function() { 
    $('#replace_me').load('new.html'); 
}); 

,它會自動將事件記錄到新添加的元素重新結合。

1

什麼你要找的是live方法

$(document).ready(function() { 
    $('#click_me').live('click', function() { 
    $('#replace_me').load('new.html'); 
    }); 
}); 
0

你需要使用.live()因爲一旦新markupo加載到頁面的原始#clickme元素不存在了。

$('#click_me').live("click", function() { 
    $('#replace_me').load('new.html'); 
}); 
0

這並不真的有很多工作要做,load(),那就是新的鏈接存在之前,點擊附加處理程序,所以新的鏈接沒有和處理程序連接到它。這是很容易與jQuery的live()解決:

$('#click_me').live('click', function() { 
    $('#replace_me').load('new.html'); 
}); 

http://api.jquery.com/live/