2013-07-16 26 views
1

我結合一些jQuery的事件處理程序,其中最初工作精細的頁面的元素,但是如果用戶選擇頁面上的單選按鈕時,該元素被刪除;他們可以通過選擇另一個單選按鈕來恢復它;但是當數據通過AJAX加載時,該函數不再從事件處理函數中觸發。綁定的事件處理程序AJAX操作後不再工作

我與此綁定它:

jQuery(document).ready(function(){ 

    jQuery('#buyout_field').mouseleave(function() { 
     update(); 
    });  

    jQuery('#buyout_field').focusout(function() { 
     update(); 
    }); 

}); 

因此,要回顧一下,運行正常開始,但一旦AJAX刪除,然後把數據備份它不再運行。

這裏是運行AJAX的代碼:

function update() { 

    getAjaxData(loadUrl, dataObject, 'GET', 'json') 

     .done(function(response) { 

      // Add/Hide other data 
      jQuery('#buy_now').html(response.buy_now);    

     }) 

    // End 

} 

function getAjaxData(loadUrl, dataObject, action, type) { 

    return jQuery.ajax({ 
     type: action, 
     url: loadUrl, 
     data: dataObject, 
     dataType: type 
    });  

} 

元件buyout_field包含在buy_now元件內。

是不是放回DOM什麼元素?

+0

向我們展示烏爾HTML結構 – krishgopinath

+0

使用事件代表團 –

+0

添加一些你的HTML,所以我們可以看到您的綁定的範圍。當然,替換html會破壞內部元素和任何處理程序分配給他們。如果你把一些HTML在這裏,我們可以幫助您應對使用「活」或「代表」的事件處理程序 – Luke

回答

5

試試這個:

jQuery('#buy_now').on('mouseleave', '#buyout_field', function() { 
    update(); 
}); 

jQuery('#buy_now').on('focusout', '#buyout_field', function() { 
    update(); 
}); 
2

您需要委託的事件...

jQuery(document).on('focus', '#buyout_field', function() { 
    update(); 
}); 

jQuery('#buyout_field').on({ 
    mouseleave : function() { 
     update(); 
    }, $(document) 
}); 

它始終是一個更好的主意,以取代委託給文件,靜態祖先的事件,其事件綁定。在這種情況下'#buy_now'將是靜態的父母,因爲它是隨時顯示在頁面上,當事件被約束。