让验证在已删除字段的表单中工作

Get validation to work in form where fields have been removed

本文关键字:表单 工作 字段 删除 验证      更新时间:2023-09-26

我尽量让这个保持简单,不好意思,如果它很乱…

我用jQuery/JS在wordpress站点上为表单构建了一个自定义验证(不要问为什么)。一般的想法是,我有一个数组,它要检查输入字段的ID。所以这个列表是:

toValidate=new Array(); 
toValidate[0]="#name";       
toValidate[1]="#location";
toValidate[2]="#method";

,它用$.each(toValidate)循环它们,然后如果它们是空的,就会弹出一个窗口,并做一些其他的事情,比如为字段添加红色边框。现在所有这些都很好。但我还有另一个问题。我有几个总是必需的字段,但我也有一个复选框,当他们选中它时,TR应该被删除,TR中有几个字段是必需的,如果可见

现在的问题是,即使我单击复选框,因此删除TR,我也无法使其工作,因此不再需要删除TR的必填字段。我已经尝试了多种方法,但根据我尝试的解决方案,不断得到不同的问题。

我所尝试的一个例子是改变数组,以便如果他们选中框,它会删除一对数组对象(那些在被删除的行中)。但它不起作用,它只是表现得好像它们还在那里。

对不起,让这个长,但我想问的是什么将是最好的做法在这里做什么?你会怎么做?我不想要代码,只是一个关于我应该如何计划它的一般想法,因为我卡住了。

编辑:我忘了说,我使用数组的方式也可能是一个毫无价值的想法,所以任何关于如何改进它并使其工作的想法都是值得赞赏的。

与其在javascript中添加/删除可见性,不如在css中完成。它将在验证时简化选择器。

css:

table tr.ignore {
  visibility: hidden;
}
javascript:

$('input.hide_thing').click(function() {
  $('tr.whatever_tr').toggleClass('ignore', !$(this).checked)
});

验证器:

$('tr:not(.ignore)').validate();

可以先检查元素是否可见。

$.each(toValidate, function(index, element) {
    if (!$(element).is(':visible')) return;
    // ... proceed to validate
});