0

我目前正在使用以下代码来绑定一个将输入限制为动态创建的一组文本框的事件。

function createSomeTextBoxes() {
    //code here to add text boxes
    $('.PointerSPSLText').on('keyup', function() { charaterCount( $(this).attr('id'), 30 ) });
    $('.SPSLText').on('keyup', function() { charaterCount( $(this).attr('id'), 30 ) });
}

我遇到的问题是这些事件只与它找到的类的第一个元素相关联,因为每个元素可能不止一个,这是一个问题。我曾经为此使用 .live 事件,我可以在加载 DOM 时声明一次,然后 jquery 负责其余的工作。有没有办法模仿 .live 事件或实现我需要的结果的最佳方法是什么?

4

4 回答 4

1

对于动态创建的元素,我认为您必须使用事件委托,例如:

$("body").on("keyup", ".PointerSPSLText", function() {
   charaterCount( $(this).attr('id'), 30 )
});
$("body").on("keyup", ".SPSLText", function() {
   charaterCount( $(this).attr('id'), 30 )
});

有关更多信息on()http ://api.jquery.com/on/

于 2013-09-05T09:21:52.830 回答
0

是的,权利live现在已被弃用,

你可以像这样使用动态on版本,

 $('#some_static_parent_that_holds_PointerSPSLText').on('keyup','.PointerSPSLText', function(){});
于 2013-09-05T09:22:01.170 回答
0

新版本的 jQuery 使用on事件而不是live将事件处理程序绑定到动态元素。

function createSomeTextBoxes() {
    //code here to add text boxes
    $(document).on('keyup', '.PointerSPSLText', function() { 
       charaterCount( $(this).attr('id'), 30 ) 
    });
    $(document).on('keyup','.SPSLText', function() { 
       charaterCount( $(this).attr('id'), 30 ) 
    });
}

请注意,事件处理程序绑定到文档而不是元素的选择器。选择器被指定为 on 函数的第二个参数。当一个事件被触发时,它会传播到documentwhich 然后检查是否target匹配作为第二个参数提供的选择器。您可以绑定到静态父级而不是 以document获得更好的性能。

于 2013-09-05T09:22:04.333 回答
0

如果您只想限制字符长度,为什么不使用 input/textarea 元素的“maxlength”属性,前提是您可以访问生成动态元素的函数?

<input type="text" name="usrname" maxlength="30">
<textarea maxlength="30">Enter text here...</textarea>
于 2013-09-05T09:43:04.053 回答