2012-12-27 24 views
5

我有一些從AJAX調用創建的元素。在這些元素中,有一個子元素,當它被徘徊時需要顯示另一個動態創建的子元素。當我在小提琴中運行jQuery的.hover時,它工作正常。當我在我的代碼中實現它時,它不想工作。jQuery的.hover不工作在AJAX渲染的元素

我在想,如果這取決於當.hover腳本加載時的元素從AJAX加載VS上。一個人需要先走到另一個之前嗎?在運行.hover腳本之前是否應該制定.promise以等待AJAX​​元素加載?

這裏是我的榜樣的fiddle

回答

6

我明白你的問題意味着你是一個事件附加到可能尚不存在的元素。而不是綁定到元素(其中.hover()是簡寫),您應該將其委託給永久容器元素。您可以使用delegate().on(),這取決於jQuery版本。

下面是它看起來像在你的提琴:http://jsfiddle.net/7dcuh/15/

+0

就像一個魅力。謝啦。 – Plummer

0

你需要AJAX的成功回調插入元素後執行.hover腳本。

0

如果使用Ajax生成內容,則應該使用livequery

9

對於動態生成的元素,事件應該從元件或文檔對象的靜態親本之一被委託,則可以使用ondelegate方法。

$(document).on({ 
    mouseenter: function() { 
     $(this).next('.show').fadeIn(800); 
    }, 
    mouseleave: function() { 
     $(this).next('.show').delay(800).fadeOut(800); 
    } 
}, '.touch'); 
+0

+1不知道語法! – lnrbob

0

這可能不是正確的答案,但我發現,在一個函數中創建的元素。需要在函數中聲明它們的選擇器。像這樣:

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(); 
    }); 
} 
1

使用.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; 
} 
2

你應該嘗試插入Ajax響應裏面的腳本。 像

<script> </script> 

或您所服務的腳本的AJAX調用完成或成功

jQuery.ajax({ 

success:function(){jQuery('selector').yourfunction();}, 

     }); 

時,如果你不,該腳本將運行並沒有找到DOM中選擇和腳本不會運行再次