我正在尝试推进Jquery-autcomplete功能。我希望Jquery-autocomplete在表中创建新行。这到目前为止工作。但我希望Jquery添加一个删除按钮。因此,用户可以删除其中一个添加的项目。
$(document).ready(
function() {
//create an new <tr> <td> in #log
function log( message ) {
$("<tr> <td>" + message + "<input class='Entf' type='button' value ='Entfernen' />" + "</td></tr>").appendTo("#log");
$( "#log" ).attr( "scrollTop", 0 );}
// get the values from a json-source
$( "#REMOTE" ).autocomplete({
source: "json.php",
minLength: 0,
select: function( event, ui ) {
log( ui.item ?
ui.item.value + " aka " + ui.item.id :
"Nothing selected, input was " + this.value );}
});
// this is just a test if jquery recognizes the click
$('.Entf').click(function(event){
alert("Thanks for visiting!");
});
});
但是jQuery不会识别它创建的元素的点击。为了检查fpr erros,我在html中放了一行。这个按钮有效。但是当我通过Jquery添加一行时,添加的按钮不起作用。这是firebug的一个例子:
<table id="log" border="0" width="400">
<tbody>
<tr>
<td>
test
<input class="Entf" type="button" value="Entfernen"> //this one workes fine. it comes from the original html
</td>
</tr>
<tr>
<td>
daniel aka 121
<input class="Entf" type="button" value="Entfernen"> //this one doesn't work. it's the one that was added by Jquery
</td>
</tr>
</tbody>
</table>
有什么想法吗?
谢谢!请忘记我的英语:)
答案 0 :(得分:5)
$('.Entf').live('click',function(event){
alert("Thanks for visiting!");
});
使用live使jQuery能够在由javascript
动态创建的选择器上使用回调答案 1 :(得分:1)
因为在绑定处理程序之后创建了元素,所以它没有注册。你需要这样的东西:
$("body").delegate(".Entf", "click", function() { //function here });
答案 2 :(得分:1)
在jQuery 1.7 +
中使用jQuery on()$(document).on("click",".Entf",function(event){
alert("Thanks for visiting!");
});
在jQuery 1.4.3 +中使用jQuery delegate():
$(document).delegate(".Entf", "click", function(event){
alert("Thanks for visiting!");
});
在jQuery 1.3中使用jQuery live():
$('.Entf').live('click',function(event){
alert("Thanks for visiting!");
});
答案 3 :(得分:0)
生成内容后,需要绑定按钮,即在生成内容后执行以下操作:
$('.Entf').click(function(event){
alert("Thanks for visiting!");
});
试。
编辑:正如Neal所指出的那样,做这个方法时要小心。原因是它将绑定到所有.Entf元素,而不仅仅是新元素,导致多个单击事件。有关如何创建和绑定事物而不必处理live()或多重绑定的示例,请参阅http://jsfiddle.net/R9Kb4/2/。