Javascript 如何解决这个简单的jQuery问题?

Javascript 如何解决这个简单的jQuery问题?,javascript,jquery,Javascript,Jquery,一般来说,我对jQuery和JavaScript都是新手。我注意到,如果您通过jQuery向DOM中插入一个元素,然后尝试在该元素上执行操作,则会失败。例如: 我正在向页面上的所有输入元素添加一类“listenToField”: $(function() { $('input').addClass('listenToField'); }); 然后,当我添加第二个函数时: $(function() { $('input').addClass('listenToField');

一般来说,我对jQuery和JavaScript都是新手。我注意到,如果您通过jQuery向DOM中插入一个元素,然后尝试在该元素上执行操作,则会失败。例如:

我正在向页面上的所有输入元素添加一类“listenToField”:

$(function() {

$('input').addClass('listenToField');

});
然后,当我添加第二个函数时:

$(function() {

     $('input').addClass('listenToField');

     // second function
     $('.listenToField').keydown(function() {

          alert('Hi There')

     });

});
它不会提醒“你好”


但是,如果我将类“listenToField”硬编码到HTML输入中,则警报会起作用。当jQuery动态插入类而不使用硬编码时,我怎么能让它继续工作?

切掉中间人:

(function() {
     $('input').keydown(function() {
          alert('Hi There')
     });
});

无论如何,您都将该类应用于所有输入,因此只需附加keydown事件即可。如果你也需要CSS样式,你仍然可以应用这个类。

试试jQuery的
live
方法

live()
方法将事件分配给已存在的元素和将要创建的元素


@jesus.tesh提供了一个正确的解决方法,但是可以找到它没有像您期望的那样工作的原因


Jquery仅在加载时对存在的元素起作用。如果需要对创建的元素进行操作,则需要按照常见问题解答中的说明进行进一步操作。

另一个想法是,为什么要采取两个步骤?jQuery是可链接的。jQuery函数的返回值是jQuery对象

$("input").addClass("listenToField").keydown(function () { alert("Hi There"); });

这件事不要太过火。当jQuery链变得太长时,它们就会变得难以阅读。

我将其简化为示例。实际上,我正在将该类添加到表单验证失败的输入字段中。除了“listToField”类之外,它还为所有这些输入添加了一个红色边框。因此,稍后当用户开始填写缺少的信息时,我将删除边框。无论如何,我只是想知道解决方案,因为我相信它会在其他项目中弹出。当然。查看ChrisW添加的信息。他并不是在创建新元素,他只是在应用一个类,然后试图按类进行选择。你不认为跳过课堂应用部分更有意义吗?我想可能还有另一个原因,但这在问题中并不明显。很好的信息,谢谢你添加它。回答这个问题是好的,但教书更好+1给你
$("input").addClass("listenToField").keydown(function () { alert("Hi There"); });