-1

在阅读了我的问题的一堆解决方案后,我找不到答案,所以我做了我的。

单击按钮时,我正在添加 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),这个类已经附加了一个事件,创建$(document).ready如下:

$(".txtArea").on('keyup','.txtArea',function(){
        if($(this).val() == ""){
            $(".button").attr('disabled',true); 
        }
        else $(".button").attr('disabled',false);   
    });

出于任何原因,文本区域事件不起作用,正确添加了类,样式工作正常。我尝试过使用.delegate()并将事件放入$(function(){ ..code.. });其中不起作用

我究竟做错了什么 ?...任何帮助表示赞赏。提前致谢

4

7 回答 7

4

如果要将事件绑定到动态创建的元素,则需要在原始选择器中指定父级:

$(document).on('keyup','.txtArea',function(){...

这应该将其应用于文档中的所有文本区域。

还值得指出的是,除非您确实需要将其应用于整个文档中的所有文本区域,否则您不应将$(document)其用作初始选择器,而应尽可能缩小范围/父级。也就是说,如果只有其中的 textareas<div id="parent"应用了这个规则,那么你应该写

$('#parent').on('keyup','.txtArea',function(){...
于 2013-07-09T15:49:01.410 回答
1

改变$(".txtArea").on('keyup','.txtArea',function(){...});

$(document).on('keyup','.txtArea',function(){...});

或者,到 .txtArea 的选择器父级,并正确委托;)

于 2013-07-09T15:49:42.007 回答
1

on在文档而不是文本区域类上设置:

$(document).on('keyup','.txtArea',function(){...});

您需要在 DOM 中已经存在的东西上设置事件。

于 2013-07-09T15:47:33.573 回答
1

我不确定这是否是您的问题,但该.on函数需要绑定在页面加载时可用的元素上。

简而言之,您需要确保页面加载时绑定元素就在那里。

$("avaliableFromTheStart").on('keyup','.txtArea',function(){

我相信这可能会有所帮助。

编辑

原因$(document).on('keyup','.txtArea',function(){...是一个坏主意,并且与使用 now decrepitude 完全相同的.live是,将其.on置于document意味着当单击此元素时,它将不得不冒泡直到找到顶层document。如果你能避免它,这是一个非常糟糕的主意。

唯一有意义的是,如果您正在构建一个 ajax 应用程序。

于 2013-07-09T15:48:04.153 回答
1

您可以尝试将事件附加到文档中。

$(document).on('keyup', '.txtArea', function(e) {
        if($(e.target).val() == ""){
            $(".button").attr('disabled',true); 
        }
        else $(".button").attr('disabled',false);   
    });
于 2013-07-09T15:52:05.187 回答
0

您仍在将事件附加到动态元素。

代替

$(".button").on('click', function(){ });

将事件附加到一个非动态的元素上,比如document该元素的更直接的父级(可能是任何var p = $(this).parent();选择):

$(document).on('click', '.button', function(){ });

于 2013-07-09T15:50:30.990 回答
0

尝试改变:

$(".txtArea").on('keyup','.txtArea',function(){...});

至:

$(document).on('keyup','.txtArea', function(){...});
于 2013-07-09T15:46:07.130 回答