在jQuery全局验证中排除某个div?

时间:2011-10-31 04:12:51

标签: javascript jquery

好的,我们页面中有大约30个输入框,而不是为每个输入框写一个无数据行,我们有一个简单的声明:

if( $(div).find('input:text[value=""]').length > 0 ||
    $('#checkbox1Wrap').find('input:checkbox:not(:checked)').length > 0 ||
    $('#checkbox2Wrap').find('input:checkbox:not(:checked)').length > 0 ||
    $(div).find('select option:first-child:selected').length > 0 ||
    $(div).find('textarea').val() == ""
){
    $(div).prepend('<p class="field_help"> Please complete all fields before moving to next step</p>');
    return false;
}

这将检查所有输入字段以检查其长度是否大于0,但我们希望排除某些字段被检查。

例如:

<input type="text" autocomplete="off" value="" name="ext" id="ext">

我们不希望检查上述输入字段。

我们如何才能使if语句跳过某些定义的ID?

1 个答案:

答案 0 :(得分:4)

您可以使用.not()方法:

$(div).find('input:text[value=""]').not('#id1, #id2')

文档:http://api.jquery.com/not/

我应该注意,执行此操作的一种标准方法稍微简单一些,但是,如果您不介意将表单的业务逻辑与HTML标记混合:

  1. 在HTML中,为所有必需元素添加required CSS类。

  2. 在jQuery中,在选择器中指定该类:

    `$(div).find('input.required:text[value=""]')`
    
  3. 现在只验证必需的元素。这种方法有几个优点:

    • 您可以轻松使用CSS直观地显示必填字段
    • 选择器更简单
    • 如果您确定需要更复杂的验证,那么您已经设置为使用jquery-validation

    你也可以使用optional类在相反的方向做同样的事情,但我认为required在语义上有点好。