2013-03-19 53 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)更近的祖先,你应该。