在运行已更改这些属性的函数后,使用特定属性计算当前输入数

与此问题相关: 使用jQuery,保持表单的提交按钮被禁用,直到所有必需的textbox,radio,checkbox元素都有值(或被选中)

我非常友好地帮助整合了这个function

$('input[type=submit]').prop('disabled', true).addClass('disabled'); var required = $('[required]'); required.bind('change keyup', function() { var flag = 0; required.each(function() { if ($(this).not(':checkbox, :radio').val() || $(this).filter(':checked').val()) { flag++; } }); if (flag == required.length) { $('input[type=submit]').prop('disabled', false).removeClass('disabled'); } else { $('input[type=submit]').prop('disabled', true).addClass('disabled'); } }); 

这里发生的是表单的提交按钮保持禁用状态,直到所有具有“required”属性的字段具有某种值(或已经检查过等)。

作为更大图片的一部分,另一个jQuery函数(工作正常)隐藏了一些这些字段,具体取决于选择框的值。

实际上,当隐藏这些字段时,应删除所需的属性。 删除所需的属性后,我希望上面的函数只计算剩余的必需字段(required.length),但事实上,它计算所有这些字段 – 即使是那些不再具有必需属性的字段。

在这方面的任何想法?

您正在反复比较同一组元素。 您需要在每次检查时重新选择所需的那些。

更改

 required.each(function() 

 $([required]).each(function() 

您正在选择所有元素,然后循环遍历它们,无论它们现在具有哪些属性。 您希望让jQuery重新选择现在具有required属性的元素,以便获得更新列表。 然后应该按预期执行。

你不仅要删除required属性,还要删除此元素的.unbind('change keyup') 2。使用required = required.not('[required]');将其从集合中删除required = required.not('[required]');

这个小提琴给出了基本的想法:在你点击按钮之前,两个必需的输入提醒他们的号码,点击它之后,总长度减少,第二个输入停止提醒

如果再次需要change keyup请不要忘记绑定change keyup

你可以加:

 || $(this).css('display') === 'none') 

到if周围的标志++。