捕获动态创建的字段上的 javascript 事件
我有一个名为“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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以使用 Jquery 的 live:
或者您可以在以下情况下添加按键事件 :创建元素,这将为您提供更好的性能:
示例
YOu can use Jquery's live:
Or you can add the keypress event when you create the element, which will give you much better performance:
Example of that
请改用
.live()
或.delegate()
。http://api.jquery.com/live/
http://api.jquery.com/delegate/
Use
.live()
or.delegate()
instead.http://api.jquery.com/live/
http://api.jquery.com/delegate/
如果您使用 jQuery live 方法将事件绑定到类,它甚至会应用于调用 live 方法后添加到 DOM 的元素。
文档: http://api.jquery.com/live/
从文档中:
使用此方法将单击处理程序绑定到目标元素:
然后添加一个新元素:
然后单击新元素也将触发该处理程序。
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:
And then later add a new element:
Then clicks on the new element will also trigger the handler.
使用
.live()
:Use
.live()
: