2012-03-22 36 views
0

正如我已經理解使用$('。whatever')。click()僅適用於最初創建的項目。其他項目不會以正確的方式迴應。然後我被引導到使用類似$('。whatever).on('click',myFunction())的東西。但是,我沒有檢測到任何差異,因爲新創建的項目沒有被調用。通過jQuery創建的按鈕不會響應點擊

這是一個示範的jsfiddle我的示例代碼:http://jsfiddle.net/atrus6/zaKZN/

我最初的輸入端加「殺」將在正確的方式工作,但是任何額外的「輸入+殺的不會不會做任何事情。我錯誤地使用.on()還是其他的東西?

回答

3

嘗試:


$('.rmv').live('click', function() { 
    console.log('here'); 
    $(this).parent().remove(); 
    return false; 
}); 

OR


$(document).on('click', '.rmv', function() { 
    console.log('here'); 
    $(this).parent().remove(); 
    return false; 
}); 

jsFiddle Demo

+0

直播()已廢棄的1.7,但第二個工作(當我沒有在報價文件) – Atrus 2012-03-22 05:13:44

+0

工作對我來說,檢查演示,didnt你的意思是這樣的 – 2012-03-22 05:19:29

0

因爲你定義招標後,他們被新創建的元素都不會自動綁定到你的點擊處理程序。一種解決方案可能是在創建新元素時綁定新元素。

的jsfiddle這裏:http://jsfiddle.net/zaKZN/17/

$('.rmv').on('click', remove); 

$('.add').click(add); 

function remove() 
{ 
    console.log('here'); 
    $(this).parent().remove(); 
    return false; 
} 

function add() 
{ 
    var add = "<div class='input-append'>"; 
    add += "<input type='text' name='br'>"; 
    add += "<button class='btn btn-danger rmv'><i class='icon-minus'>Kill</i></button></div>"; 
    $(this).before(add); 

    //Bind newly created elements 
    $('.rmv').on('click', remove); 

    return false; 
} 
1

現場()你似乎期望在()上班工作,但不建議使用。 ()僅適用於on()被調用時存在的元素。 但是,您可以通過將()綁定到一個元素來像使用live()一樣使用它, 將作爲新創建元素的父元素,並指定一個選擇器。

因此,例如,

$('body').on('click', '.rmv', function() { 
    console.log('here'); 
    $(this).parent().remove(); 
    return false; 
}); 
+0

謝謝,我不知道只在元素工作。 – Atrus 2012-03-22 12:57:55