捕获动态创建的字段上的 javascript 事件

发布于 2024-12-02 15:15:35 字数 568 浏览 0 评论 0原文

我有一个名为“form_inputext1”的类的输入字段。

我在按 ENTER 时执行一些操作,使用以下代码:

jQuery(".form_inputext1").keypress(function(event) {
      console.log(event.keyCode);
      if (event.keyCode == '13' || event.which == '13') {
         event.preventDefault();

         jQuery("#addMoreOptions").click();

         return false;
      }
    });

这部分工作正常。它所做的事情之一是,作为 ajax 调用的结果,它添加了一个“form_inputext1”类的输入字段。

问题是这个新添加的字段与我编写的按键事件无关。我认为这是因为 jQuery 代码仅将事件附加到现有字段,而不是附加到将来添加的字段。

我该如何解决这个问题?我希望这个函数适用于 onkeypress,即使对于尚未在 DOM 中的输入也是如此。

I have an input field with class named "form_inputext1".

I am doing some action when pressing ENTER, using this code:

jQuery(".form_inputext1").keypress(function(event) {
      console.log(event.keyCode);
      if (event.keyCode == '13' || event.which == '13') {
         event.preventDefault();

         jQuery("#addMoreOptions").click();

         return false;
      }
    });

This part works fine. One of the things it does is it adds one more input field of class "form_inputext1" as a result of an ajax call.

The problem is this newly added field is not associated with the keypress event I wrote. I assume that's because the jQuery code only attach the event to the existing fields, not to the fields added in the future.

How can I work around this? I want this function to apply to onkeypress even for inputs that are not in the DOM yet.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

命硬 2024-12-09 15:15:35

您可以使用 Jquery 的 live

jQuery(".form_inputext1").live('keypress', function(event) {
      console.log(event.keyCode);
      if (event.keyCode == '13' || event.which == '13') {
         event.preventDefault();

         jQuery("#addMoreOptions").click();

         return false;
      }
});

或者您可以在以下情况下添加按键事件 :创建元素,这将为您提供更好的性能:

$('.clicker').click(function() {
    $('<div class="clicker" />').text('new').appendTo($(this)).keypress(function(event) {
        alert(event.which);
    })
})

示例

YOu can use Jquery's live:

jQuery(".form_inputext1").live('keypress', function(event) {
      console.log(event.keyCode);
      if (event.keyCode == '13' || event.which == '13') {
         event.preventDefault();

         jQuery("#addMoreOptions").click();

         return false;
      }
});

Or you can add the keypress event when you create the element, which will give you much better performance:

$('.clicker').click(function() {
    $('<div class="clicker" />').text('new').appendTo($(this)).keypress(function(event) {
        alert(event.which);
    })
})

Example of that

我不在是我 2024-12-09 15:15:35

如果您使用 jQuery live 方法将事件绑定到类,它甚至会应用于调用 live 方法后添加到 DOM 的元素。

文档: http://api.jquery.com/live/

从文档中:


使用此方法将单击处理程序绑定到目标元素:

$('.clickme').live('click', function() {
  // Live handler called.
});

然后添加一个新元素:

$('body').append('Another target');

然后单击新元素也将触发该处理程序。

If you use the jQuery live method to bind an event to a class, it will apply even to elements that are added to the DOM after you call the live method.

Documentation: http://api.jquery.com/live/

From the documentation:


To bind a click handler to the target element using this method:

$('.clickme').live('click', function() {
  // Live handler called.
});

And then later add a new element:

$('body').append('Another target');

Then clicks on the new element will also trigger the handler.

挖鼻大婶 2024-12-09 15:15:35

使用 .live()

$('.form_inputext1').live('keypress', function ( event ) {

});

Use .live():

$('.form_inputext1').live('keypress', function ( event ) {

});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文