2012-04-06 32 views
-1

我想在ajax加載元素上使用jQuery.one。它正在工作,如果元素已被加載,但不是在使用ajax加載元素時。jquery .one不能在ajax加載元素上工作

這是我正在做的。


$("#selector").one('mouseenter', selMouseEnter); 

function selMouseEnter() { 
Some code.... 
} 

Thx提前。 沙市

編輯:

$(".pitem").on('mouseenter', selMouseEnter); 

$(".pitem").mouseleave(function(){ 
    jQuery(this).find(".tooltip").remove(); 
    $(".pitem").on('mouseenter', selMouseEnter); 
}); 

function selMouseEnter() { 
    jQuery(this).find(".tooltip").remove(); 
     var id = $(this).attr('id').replace('myprize', ''); 
    var myObj = jQuery('#Py').data('myprize' + id); 
    if(myObj) { 
     Some code that is opening tooltip having buttons.... 
    } 
} 

現在矛盾是,當我在提示它在調用MouseEnter事件點擊按鈕再次,而不是一個特定的按鈕。

注:#PY來用ajax

回答

0

因爲它是動態加載的元素,所以您需要使用.live().on()livequery()。請參閱鏈接獲取更多信息 - 根據您的jQuery版本使用適當的方法

1

你將不得不運行您的代碼後,該元素被放在頁面,因爲您正在使用的.one()靜態形式,這就要求元件的運行時間存在代碼。

在jQuery中1.7+,你可以使用的.one()委派的版本,這樣,它會在第一的mouseenter迴應時,它被添加到頁面的#selector對象:理想

$(document).one('mouseenter', "#selector", selMouseEnter); 

,你會將document替換爲運行此代碼時存在的靜態父對象#selector,因爲這比使用document對象效率更高,但document可以工作。

+0

試過但與我的其他代碼衝突。 – Shashi 2012-04-06 04:22:22

+1

您將不得不向我們展示您的HTML以及與之衝突的代碼,以便我們知道要建議的內容。這就是你如何處理動態添加的元素(使用委託事件處理),或者你必須在元素添加到頁面後才安裝事件處理程序。選擇這兩個選項之一。 – jfriend00 2012-04-06 04:27:34

+0

jfriend00有它完全正確的......「嘗試過,但它是相互矛盾的」不夠好。唯一的迴應是,「那麼......然後解決衝突。」 – 2012-04-06 04:37:43

0

爲了在動態加載的元素上正確地處理jquery事件,您將需要以這種方式附加事件。

$("#parent").on({ 
    mouseenter: function (e) { 
    // perform mouse enter event 
    }, 
    mouseleave: function (e) { 
    // perform mouse leave event 
} 
}, '#selector'); 

其中#Parent表示動態加載元素的元素的id。

+0

嘗試過但與我的其他代碼衝突。 – Shashi 2012-04-06 04:22:27

+0

它發生衝突,您需要在負責創建動態元素的函數中執行此代碼。 – irfanmcsd 2012-04-06 04:26:52

相關問題