Javascript 如何使用jQuery选择动态创建的元素

Javascript 如何使用jQuery选择动态创建的元素,javascript,jquery,html,forms,input,Javascript,Jquery,Html,Forms,Input,我正在根据用户输入动态更新一些元素。具体来说,我有一个表单字段表,用户可以填写。当页面加载时,我可以计算有多少是空的 $(whocares).click(callback); callback = function() { var empties = $('.something input[value=""]); var count = empties.length; //4 } 但在用户填写新的后,计数保持不变 当我检查DOM时,我也看不到更新的值。新的表单字段仍然显示:v

我正在根据用户输入动态更新一些元素。具体来说,我有一个表单字段表,用户可以填写。当页面加载时,我可以计算有多少是空的

$(whocares).click(callback);

callback = function() {
    var empties = $('.something input[value=""]);
    var count = empties.length; //4
}
但在用户填写新的后,计数保持不变

当我检查DOM时,我也看不到更新的值。新的表单字段仍然显示:
value
,而不是
value=“whatever”

所有jQuery都在
$(document.ready()中


如何让jQuery看到新的更改?

您可以使用

$(document).on("change", "youtInput.YourImputClass", function(){
  var count = $(document).find("youtInput.YourImputClass[value^='']").length;
}
这应该能奏效

希望这将是有益的。
祝你好运。

你可以用

$(document).on("change", "youtInput.YourImputClass", function(){
  var count = $(document).find("youtInput.YourImputClass[value^='']").length;
}
这应该能奏效

希望这将是有益的。 祝你好运。

此代码:

var count = 0;
$('.something input').each(function()
    if($(this).val().length = 0) {
        count++;
    }
});
此代码:

var count = 0;
$('.something input').each(function()
    if($(this).val().length = 0) {
        count++;
    }
});

从jQuery 1.9开始,选择器中的[value=]符号只处理属性(.attr),这些属性与表单元素的当前状态不匹配,而是与元素的“value”属性匹配

只有表单元素的属性(.prop)将映射此元素的当前值

您可以通过以下方式获取空元素:

$(":input").filter(function () { return $(this).val() === ""; });

有关详细信息,请阅读。

从jQuery 1.9开始,选择器中的[value=]符号仅处理属性(.attr),这些属性与表单元素的当前状态不匹配,而与元素的“value”属性匹配

只有表单元素的属性(.prop)将映射此元素的当前值

您可以通过以下方式获取空元素:

$(":input").filter(function () { return $(this).val() === ""; });

您可以阅读获取更多信息。

首先要知道,当您运行jQuery选择器时,您要求它查看DOM的当前状态,并找到与选择器匹配的元素。当您将一个变量设置为等于该jQuery函数的结果时,您将得到一个jQuery元素数组,这些元素表示匹配的DOM元素。当访问缓存的变量时,您不会再次向DOM请求匹配的元素

例如:

var empties = $('.something input[value^=""]');
empties.length // 4;
如果DOM随后更改状态,即:在两个输入字段中放入一些值,
将清空。长度保持为4,因为它只是上一个选择的缓存-不会再次进行选择。为了检查现在有多少空的,您需要再次进行选择
$('.something input[value^=“”)。长度现在等于2


因此,这里的解决方案不是将选择结果缓存在
清空
中,而是直接调用
$('.something input[value^=“”).length
,它将为您提供与该选择器的匹配数(本例中为清空数)每次运行时直接从DOM开始。

首先要知道,当运行jQuery选择器时,您要求它查看DOM的当前状态,并找到与选择器匹配的元素。当您将一个变量设置为等于该jQuery函数的结果时,您将得到一个jQuery元素数组,这些元素表示匹配的DOM元素。当访问缓存的变量时,您不会再次向DOM请求匹配的元素

例如:

var empties = $('.something input[value^=""]');
empties.length // 4;
如果DOM随后更改状态,即:在两个输入字段中放入一些值,
将清空。长度保持为4,因为它只是上一个选择的缓存-不会再次进行选择。为了检查现在有多少空的,您需要再次进行选择
$('.something input[value^=“”)。长度现在等于2


因此,这里的解决方案不是将选择的结果缓存在
清空
中,而是直接调用
$('.something input[value^=“”).length
,它会在每次运行时直接从DOM中为您提供与该选择器的匹配数(本例中为清空数)。

您必须执行
$('.something input[value^=“”).length;
每次获取计数。@imtheman我正是在点击事件的回调中这样做的。哦,我明白了。试试
var清空=$('.something input[value=“”);
取而代之。@imtheman…除非我误解了你的意思,你是说我需要用一行而不是两行来做,如我的问题所示。不,对不起。你需要从
输入[value^=”“]
中删除
^
,你必须做
$('.一些输入[value^=”“]).length;
每次获取计数时。@imtheman我正是在单击事件的回调中这样做的。哦,我明白了。请尝试
var清空=$('.something输入[value=”“]);
取而代之。@imtheman…除非我误解了你的意思,你是说我需要用一行而不是两行来做这件事,正如我的问题所示。不,对不起。你需要从
输入[value^=”“]
中删除
^
,我会试试。你介意解释一下为什么用
迭代吗。每个
都应该可以,但不是一个直接的
$(x)
选择?我之所以使用每个元素,是因为输入[value=”“]是一个css选择器。如果在输入中输入值,它不会更改html值属性。使用每个元素时,动态检查每个元素的值,我将尝试使用它。您介意解释为什么使用
进行迭代吗。每个
都应该可以工作,但不是直接的
$(x)
selection?我使用每个选项是因为输入[value=”“]是一个css选择器。如果您在输入中输入值,它不会更改html值属性。使用每个元素时,您会动态检查每个元素的值。谢谢Mike。我更新了问题,以更好地演示我在做什么。有问题的变量在回调中,因此我认为我已经在做您建议的事情,但它不起作用。啊,好的嗯,在这种情况下,这可能是选择器的问题。谢谢迈克。我更新了问题,以更好地演示我在做什么。问题中的var在回调中,所以我认为我已经在做你建议的事情了,它不起作用。啊,好的,在这种情况下,它可能是