Javascript Jquery,";关于;方法在动态元素中未正确绑定
在读了一大堆解决我问题的方法后,我找不到答案,所以我自己做了 单击按钮时,我正在添加html代码,如下所示:Javascript Jquery,";关于;方法在动态元素中未正确绑定,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,在读了一大堆解决我问题的方法后,我找不到答案,所以我自己做了 单击按钮时,我正在添加html代码,如下所示: $(".button").on('click',function(){ var p = $(this).parent(); var data = // HTML CODE '<tr>'+ '<td> </td>'+ '<td><br /><textarea n
$(".button").on('click',function(){
var p = $(this).parent();
var data = // HTML CODE
'<tr>'+
'<td> </td>'+
'<td><br /><textarea name="taDescripcion" class="txtArea mark">Write here</textarea></td>'+
'<td> </td>'+
'</tr>'+
'<tr>'+
'<td> </td>'+
'<td><br /><input disabled="disabled" class="button" type="button" value="Send" /> |' +
'<span class="linkUnderL">Cancel</span></td>' +
' <td> </td>'+
'</tr>';
$(p).append(data);
});
$(".txtArea").on('keyup','.txtArea',function(){
if($(this).val() == ""){
$(".button").attr('disabled',true);
}
else $(".button").attr('disabled',false);
});
由于任何原因,文本区域事件不起作用,类被正确添加,样式工作正常。我尝试使用.delegate()
并将事件放入$(function(){..code..})中代码>它不起作用
我做错了什么。。。任何帮助都将不胜感激。提前感谢尝试更改:
$(".txtArea").on('keyup','.txtArea',function(){...});
致:
在文档上而不是文本区域类上设置on
:
$(document).on('keyup','.txtArea',function(){...});
您需要在DOM中已经存在的某些内容上设置事件。我不确定这是否是您的问题,但是.on
函数需要绑定到pageload上可用的元素上
简言之,您需要确保页面加载时绑定元素在那里
$("avaliableFromTheStart").on('keyup','.txtArea',function(){
我相信这可能会有帮助
编辑
原因$(document).on('keyup','.txtArea',function()){…
是一个坏主意,与使用现在已经老化的完全相同。live
是将.on
放在文档
上,这意味着当单击此元素时,它将不得不冒出所有气泡,直到找到顶级文档
。如果可以避免,这是一个非常糟糕的主意
只有在构建ajax应用程序时才有意义。如果要将事件绑定到动态创建的元素,则需要在原始选择器中指定父级:
$(document).on('keyup','.txtArea',function(){...
这将应用于文档中的所有textarea
$(document).on('keyup', '.txtArea', function(e) {
if($(e.target).val() == ""){
$(".button").attr('disabled',true);
}
else $(".button").attr('disabled',false);
});
还值得指出的是,除非您真的需要将其应用于整个文档中的所有文本区域,否则不应使用$(document)
作为初始选择器,而应尽可能缩小范围/父级。也就是说,如果只有中的textarea更改$(“.txtArea”).on('keyup','.txtArea',function(){…});
到$(document).on('keyup','.txtArea',function(){…});
或者,对于.txtArea的选择器父级,并正确地委托;)您仍然将事件附加到动态元素
而不是
$(“.button”)。在('click',function(){})上;
将事件附加到非动态的元素,如document
或该元素的更直接的父元素(可能是var p=$(this).parent();
选择的任何元素):
$(文档)。在('click','.button',function(){});
上,您可以尝试将事件附加到文档
$(document).on('keyup', '.txtArea', function(e) {
if($(e.target).val() == ""){
$(".button").attr('disabled',true);
}
else $(".button").attr('disabled',false);
});
您需要将选择器传递到.on()
进行委派。您正在将动态事件绑定到动态添加的元素。您必须将事件绑定到静态元素(最好是最接近的现有元素),该元素在绑定时必须存在于DOM中。…$(“最接近的现有元素”)。on('keyup',.txtArea',函数(e){…});
Ohh这是我的问题,元素在添加之前不存在,因此事件永远不会附加到它。感谢您的帮助$(文档)。在('keyup','.txtArea',函数作为
也是动态的。因此您也可以使用$(文档)。on('keyup'、'textarea.txtArea',function
学习中心有一篇很棒的文章:。哦,对不起……我看到这是我将要更新的。我没有正确阅读您的问题,我想您是在添加元素shmm,元素(文本区域)后执行此代码的直到addedok才存在,然后继续在元素中增加,直到有可用的元素。例如,尝试一个非常通用的div
。当然会,但这与使用.live
相同,他们为了性能而移动到.on.@JamieHutber.live
与此问题/答案有什么关系?是的,这是一样的,但当前的建议是使用.on
。你了解使用.on
而不是.live
的好处吗?对我来说,你似乎已经错过了使用.on
的全部目的。我相信你知道……我也想知道,呵呵,这很有效,谢谢你的支持help@JamieHutber哦,那这就是你所说的!。当然,使用$(文档)是极端的。这就是为什么我在我的文本中说它需要指定父对象。我的代码中的$(文档)只是一个例子,因为在原始问题中没有任何其他参考。
$(document).on('keyup', '.txtArea', function(e) {
if($(e.target).val() == ""){
$(".button").attr('disabled',true);
}
else $(".button").attr('disabled',false);
});