Jquery 仅在一个字段为空时验证

Jquery Validation only when one field is blank

我正在处理我认为棘手的 jquery 验证情况。

我遇到一种情况,我需要仅在一个字段为空时才需要抛出错误。

<div class='row'>
<div class='col-sm-3'>
    <div class='form-group'>
        <label for="arrivalDate">Assignment Start</label>
            <input type="text" class="form-control" id="arrivalDate" placeholder="mm/dd/yyyy" value="" name="arrivalDate" />
    </div>
</div>

<div class='col-sm-3'>
    <div class='form-group'>
        <label for="assignmentEnd">Assignment End</label>
            <input type="text" class="form-control" id="assignmentEnd" placeholder="mm/dd/yyyy" value="" name="assignmentEnd" />
    </div>
</div>

那么,我希望发生的事情是:

如果assignmentEnd 字段中有文本,则arrivalDate 字段不能为空。它应该抛出一条错误消息。

我尝试编写一个验证器,但我认为我做对了:

 $.validator.addMethod("contractCheck",   function(value,element,params) {
        if ((value).val().length != 0) {
            return true;
        }
        return false;
    },
    "Field can't be blank"
);

代码中调用:

      assignmentEnd: {
        contractCheck: "#arrivalDate"
      },  


   assignmentEnd: {
        required: "This can not be blank."
      },  

*请注意,我没有这样的名称,我只是想说明我是如何称呼它的。它是正确的格式,可以像其他字段一样被调用和评估。

当我尝试 运行 这段代码时,它实际上会抛出错误,但会提交表单(这不应该发生),所以我无法查找错误消息。

您可以使用 input 事件来检查 #assignmentEnd 元素 .value 是否有效,如果为真则为 #arrivalDate 和 [= 设置 required 属性14=] 元素,否则删除带有 .attr().removeAttr()

required 属性

$("#assignmentEnd").on("input", function() {
  if (this.value.length && this.checkValidity()) {
    $(this).add("#arrivalDate").attr("required", "required")
  } else {
    $(this).add("#arrivalDate").removeAttr("required")
  }
})
:invalid + label:after {
  content: "Field cannot be blank";
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
  <div class='row'>
    <div class='col-sm-3'>
      <div class='form-group'>
        <label for="arrivalDate">Assignment Start</label>
        <input type="text" class="form-control" id="arrivalDate" placeholder="mm/dd/yyyy" value="" name="arrivalDate" pattern="^\d{2}\/\d{2}\/\d{4}$"/>
        <label></label>
      </div>
    </div>

    <div class='col-sm-3'>
      <div class='form-group'>
        <label for="assignmentEnd">Assignment End</label>
        <input type="text" class="form-control" id="assignmentEnd" placeholder="mm/dd/yyyy" value="" name="assignmentEnd" pattern="^\d{2}\/\d{2}\/\d{4}$"/>
        <label></label>
      </div>
    </div>
  </div>
  <input type="submit">
</form>

I have a situation in which I need will need an error thrown only if one field is blank.

除了使用 dependency 函数在第二个字段上声明 required 规则外,您不需要编写自定义规则或执行任何操作。

$('#yourform').validate({
    rules: {
        assignmentEnd: {
            required: function(element) { 
                // required ONLY when other field is NOT blank
                return $('#arrivalDate').is(':filled');
            }
        }
    }
});

演示:jsfiddle.net/nwfyngwq/