2013-03-19 30 views
1

我正在使用最新的jQuery,其中說.live()已被棄用,應該使用.on()來代替。 我有問題附加點擊事件按鈕。我動態地修改按鈕值,應該能夠處理這兩種情況爲什麼不事件代表團使用jQuery上()

<input type="text" ><input id="button_1" type="button" value="add" > 
<input type="text"> <input id="button_2" type="button" value="add"> 

$('[id^="button_"]').on("click", "input", function() { 
    $(this).val("delete"); 

    $('#button_'+$(this).attr('id').split('_')[1]).attr('id', 'delButton_'+$(this).attr('id').split[1]); 

}); 

$('[id^="delButton_"]').on("click", "input", function() { 
    $(this).val("add"); 

    $('#delButton_'+$(this).attr('id').split('_')[1]).attr('id', 'button_'+$(this).attr('id').split[1]); 

}); 

此爲演示:jsfiddle

+0

因爲你不能嵌套輸入,如果這是你認爲你有。你只能委託給祖先。 – bfavaretto 2013-03-19 21:28:43

+3

''[id^=「button _」]''應該是父元素,而不是相同的元素。 – 2013-03-19 21:30:05

+0

@bfavaretto輸入元素不需要關閉。 *編輯*等等,我明白你的意思。 – Pointy 2013-03-19 21:30:33

回答

6

只能委託事件祖先元素,但你要委託到兄弟姐妹。 (其實,我不知道你在做什麼!)

所以,如果你的標記是

<div class="buttonContainer"> 
    <input type="text" ><input id="button_1" type="button" value="add" > 
</div> 

你可以使用

$('.buttonContainer').on("click", "input", function() { 
    // here, "this" will be the clicked input 
}); 

以上將委託雙方的文字點擊輸入和按鈕到他們的父div。點擊任何元素將觸發該功能。

如果你只希望定位按鈕,更改選擇傳遞給.on

$('.buttonContainer').on("click", '[id^="button_"]', function() { 
    // here, "this" will be the clicked button 
}); 
+0

我明白了,是否有任何解決方法可以解決我所要做的事情。我有這個要求,要麼添加或刪除該人的姓名。 – user525146 2013-03-19 21:33:08

+0

您不一定需要添加新的div,只需委派到綁定時存在的最近的容器。在最壞的情況下,這將是「文件」。 – bfavaretto 2013-03-19 21:33:53

1

的等效:

$('[id^="button_"]').live("click", function() { 

是:

$(document).on("click", '[id^="button_"]', function() { 

但是,如果你可以使用比$(document)更近的祖先,你應該。