2010-08-26 70 views
0

我有一些jQuery腳本選擇我運行部分頁面刷新的區域內的元素。jQuery腳本不再在部分刷新的元素上運行

我使用這個CSS技巧的代碼片段刷新頁面的那一部分:

$('#refreshbutton').click(function() { 

var url = "http://myUrl.com/indexTest.php?ID=" + Math.random(); 

setTimeout(function() { 
     $("#maindisplay").load(url+" #maindisplay>*",""); 
}, 100); 
}); 

的問題是,#maindisplay中的元素髮生變化,因此被認爲是在DOM中的新元素。由於選擇這些元素並將函數附加到它們的腳本在domready上運行,而不是在局部刷新期間運行,因此會產生問題。

到目前爲止,在部分刷新它之後,我一直無法找到將腳本重新附加到#maindisplay中的元素的方法。

我的問題是:什麼是將腳本重新附加到頁面刷新區域的最佳方式。

謝謝你的任何建議。

回答

0

你,我能想到的下列選項:

  • 把附着在一個函數並調用網頁上的功能更新
  • 使用.live()功能
  • 使用.delegate ()功能
  • 將Javascript引用添加到刷新中的引用中的功能,以便它作爲該刷新的一部分執行
  • 將該函數放入回調中
  • 使你的setTimeout的一部分
  • 其他一些創造性的方法,我沒有想到的...

剛一說明:我會看.delegate()與上下文選擇在最近的版本中添加(例如在1.4.2中可用)。

+0

感謝您的回答,作爲快速跟進問題。其中一個附加到元素的腳本是.tooltip函數,該函數在mouseenter上觸發。現在,如果我把它這樣的: $( 「機構」)的委託( 「工具」, 「了mouseenter」,函數(){$ (本).tooltip({// 事情 \t} ); }); 然後,用戶必須先將鼠標懸停在元素上,然後再次將鼠標懸停在工具提示上。如何使用.delegate或.live,而不必讓他們進行兩次鼠標移動? – BorisKourt 2010-08-26 21:31:46

+0

我認爲這與綁定級別有關。查看.delegate中的鏈接,並考慮鼠標事件,該事件要儘可能保持爲本地,以便它在右元素上觸發,而不是在父元素上觸發。請牢記.delegate,你可以鏈接,而.live不能。你可以在這裏看到一個博客:http://brandonaaron.net/blog/2010/03/4/event-delegation-with-jquery – 2010-08-27 15:54:16

+0

謝謝Mark,這非常有幫助。 – BorisKourt 2010-08-28 03:14:47

0

load()沒有采用回調函數,因爲它是第二個參數?爲什麼不將事件處理程序重新附加到具有該功能的元素上?

$('#result').load('ajax/test.html', function() { 
    //reattach event handlers here. 
}); 
1

您需要使用live()函數來附加您的點擊處理程序。