Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery,";关于;方法在动态元素中未正确绑定_Javascript_Jquery_Javascript Events - Fatal编程技术网

Javascript Jquery,";关于;方法在动态元素中未正确绑定

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>&nbsp;</td>'+ '<td><br /><textarea n

在读了一大堆解决我问题的方法后,我找不到答案,所以我自己做了

单击按钮时,我正在添加html代码,如下所示:

$(".button").on('click',function(){
    var p = $(this).parent(); 
    var data =  //  HTML CODE
    '<tr>'+
    '<td>&nbsp;</td>'+
    '<td><br /><textarea name="taDescripcion" class="txtArea mark">Write here</textarea></td>'+
    '<td>&nbsp;</td>'+
  '</tr>'+
  '<tr>'+
    '<td>&nbsp;</td>'+
    '<td><br /><input disabled="disabled" class="button" type="button" value="Send" /> |' +
    '<span class="linkUnderL">Cancel</span></td>' +
   ' <td>&nbsp;</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);   
    });