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在回调中,所以我认为我已经在做你建议的事情了,它不起作用。啊,好的,在这种情况下,它可能是