2011-06-27 46 views
1

可能重複:
Jquery live() vs delegate()將jQuery效果,新增加的元素

我有將jQuery給我添加到DOM頁面加載後發揮作用的一些問題。我正在使用以下代碼向表格主體添加新行:

$("tbody").load("php/create_rows.php?" + $.param({ "type": "unique", "unit": "day", "interval": 2 })); 

它運行良好。行被添加,但對錶體中的行起作用的Jquery函數不會影響新行。例如,在鼠標懸停行應該有應用到一個類來改變背景顏色:

$('tbody tr').hover(function() { 
    $(this).find('td').addClass('hover'); 
    }, function() { 
    $(this).find('td').removeClass('hover'); 
    }); 

它不工作,雖然。它適用於已經出現在頁面上的代碼,這些代碼不是從Jquery生成的。

+0

...或[jQuery的生活懸停](http://stackoverflow.com/questions/2262480/jquery-live-hover) – Shef

回答

2

,必須用你的

$('tbody tr').hover(function() { 

成一個函數,當你添加動態元素的DOM,你需要調用函數就像一個輸入字段 做到了這一點

function something(){ 
    $('tbody tr').hover(function() { 
    $(this).find('td').addClass('hover'); 
    }, function() { 
    $(this).find('td').removeClass('hover'); 
    }); 
} 

$("document").append(someelement); 
something(); 

例子http://jsfiddle.net/MKcaH/1/

並開始考慮它可以使用[1]:http://api.jquery.com/delegate/「委託」

2

嘗試更換您的代碼:

$('tbody tr').hover(function() { 

$('tbody tr').live('hover', function(){ 

這應該使新的東西的工作。

+0

不知道如果生活('懸停')與兩個功能的作品。它可能需要是一個功能,或更改鼠標mouseenter和mouseleave – Rodolfo

+0

我只是檢查它是否有效,它確實。不過謝謝你,因爲一旦你提到它,這讓我覺得......但它似乎有效。 – YonoRan