我有一些從AJAX調用創建的元素。在這些元素中,有一個子元素,當它被徘徊時需要顯示另一個動態創建的子元素。當我在小提琴中運行jQuery的.hover
時,它工作正常。當我在我的代碼中實現它時,它不想工作。jQuery的.hover不工作在AJAX渲染的元素
我在想,如果這取決於當.hover
腳本加載時的元素從AJAX加載VS上。一個人需要先走到另一個之前嗎?在運行.hover
腳本之前是否應該制定.promise
以等待AJAX元素加載?
這裏是我的榜樣的fiddle。
我有一些從AJAX調用創建的元素。在這些元素中,有一個子元素,當它被徘徊時需要顯示另一個動態創建的子元素。當我在小提琴中運行jQuery的.hover
時,它工作正常。當我在我的代碼中實現它時,它不想工作。jQuery的.hover不工作在AJAX渲染的元素
我在想,如果這取決於當.hover
腳本加載時的元素從AJAX加載VS上。一個人需要先走到另一個之前嗎?在運行.hover
腳本之前是否應該制定.promise
以等待AJAX元素加載?
這裏是我的榜樣的fiddle。
我明白你的問題意味着你是一個事件附加到可能尚不存在的元素。而不是綁定到元素(其中.hover()
是簡寫),您應該將其委託給永久容器元素。您可以使用delegate()
或.on()
,這取決於jQuery版本。
下面是它看起來像在你的提琴:http://jsfiddle.net/7dcuh/15/
你需要AJAX的成功回調插入元素後執行.hover腳本。
如果使用Ajax生成內容,則應該使用livequery
對於動態生成的元素,事件應該從元件或文檔對象的靜態親本之一被委託,則可以使用on
或delegate
方法。
$(document).on({
mouseenter: function() {
$(this).next('.show').fadeIn(800);
},
mouseleave: function() {
$(this).next('.show').delay(800).fadeOut(800);
}
}, '.touch');
+1不知道語法! – lnrbob
這可能不是正確的答案,但我發現,在一個函數中創建的元素。需要在函數中聲明它們的選擇器。像這樣:
function createEle(){
$('#element').after('<div id="newEle"><div id="inner" style="display:none;"></div></div>');
$('#newEle').hover(function(){
$('#inner','#newEle').show();
},function(){
$('#inner','#newEle').hide();
});
}
使用.on()函數檢出延期事件。你可以做這樣一個事件:
$('#parent').on('hover', '.touch', function() {
$(this).next('.show').fadeIn(800);
},
function(){
$(this).next('.show').delay(800).fadeOut(800);
});
OR,純CSS的解決辦法是:
.touch + .show {
display:none;
}
.touch:hover + .show {
display:block;
}
你應該嘗試插入Ajax響應裏面的腳本。 像
<script> </script>
或您所服務的腳本的AJAX調用完成或成功
jQuery.ajax({
success:function(){jQuery('selector').yourfunction();},
});
時,如果你不,該腳本將運行並沒有找到DOM中選擇和腳本不會運行再次
就像一個魅力。謝啦。 – Plummer