Как указать проверенное поле в jQuery-validate - PullRequest
1 голос
/ 25 октября 2019

У меня есть 2 поля: запрос имени и дата рождения, в то время как запрос имени является обязательным, а DoB - нет. У меня есть следующая форма для отображения сообщения проверки в поле «Запрос имени»:

var myForm = $("#myform").validate({
  rules: {
    NameQuery: "required",
    DoBQuery: {
      required: false
    }
  },
  messages: {
    NameQuery: "Please fill in name query field",
    DoBQuery: ""
  }
});
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/jquery.validate.js"></script>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/additional-methods.js"></script>


<form id="myform" method="post" action="">
  <div>
    <label for="NameQuery">Name</label>
    <input type="text" id="NameQuery" name="NameQuery">
  </div>
  <div>
    <label for="DoBQuery">Date of Birth</label>
    <input type="text" id="DoBQuery" name="DoBQuery">
  </div>
  <input type="submit" value="Search">
</form>

Теперь я хотел бы добавить некоторые стили в сообщение проверки поля Name Query. Некоторый код был добавлен во фрагмент, обратите внимание, что <div class="error__input"></div> должен СУЩЕСТВОВАТЬ В ОБАХ ПОЛЯХ , как в фрагменте

var myForm = $("#myform").validate({
  rules: {
    NameQuery: "required",
    DoBQuery: {
      required: false
    }
  },
  messages: {
    NameQuery: "Please fill in name query field",
    DoBQuery: ""
  },
  errorElement : 'div',
  errorLabelContainer: '.error__input'
});
.error__input{
  min-height: 20px;
}
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/jquery.validate.js"></script>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/additional-methods.js"></script>
<form id="myform" method="post" action="">
  <div>
    <label for="NameQuery">Name</label>
    <input type="text" id="NameQuery" name="NameQuery">
    <div class="error__input"></div>
  </div>
  <div>
    <label for="DoBQuery">Date of Birth</label>
    <input type="text" id="DoBQuery" name="DoBQuery">
    <div class="error__input"></div>
  </div>
  <input type="submit" value="Search">
</form>

Теперь сообщение проверки существует в обоих полях, я понимаю, что jQuery-validate находит div error__input и применяет к нему класс, нопочему он добавляет сообщение во второе поле и как я могу установить, чтобы предупреждающее сообщение применялось только к первому сообщению, в то время как оба <div class="error__input"></div> должны быть там?

Ответы [ 3 ]

1 голос
/ 25 октября 2019

Вы можете использовать errorPlacement , чтобы поместить сообщение об ошибке рядом с элементом ошибки.

errorPlacement: function(error,element){
   error.appendTo(element.next(".error__input"));
}

var myForm = $("#myform").validate({
  rules: {
    NameQuery: "required",
    DoBQuery: {
      required: false /* if it is not required, why you put here? You can simply not insert this input field in validate()'s rules. */
    }
  },
  messages: {
    NameQuery: "Please fill in name query field"
  },
  errorElement : 'div',
  errorPlacement: function(error,element){
    error.appendTo(element.next(".error__input"));
  }
});
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/jquery.validate.js"></script>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/additional-methods.js"></script>
<form id="myform" method="post" action="">
  <div>
    <label for="NameQuery">Name</label>
    <input type="text" id="NameQuery" name="NameQuery">
    <div class="error__input"></div>
  </div>
  <div>
    <label for="DoBQuery">Date of Birth</label>
    <input type="text" id="DoBQuery" name="DoBQuery">
    <div class="error__input"></div>
  </div>
  <input type="submit" value="Search">
</form>
1 голос
/ 25 октября 2019

Вы хотите что-то вроде этого, я думаю:

var myForm = $("#myform").validate({
  rules: {
    NameQuery: "required",
    DoBQuery: {
      required: false
    }
  },
  messages: {
    NameQuery: "Please fill in name query field",
    DoBQuery: ""
  }
});
#myform .error {
    display: block;
    color: red;
}

#myform input {
  display: inline;
}

#myform > div {
  height: 50px;
}
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/jquery.validate.js"></script>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.12.0/additional-methods.js"></script>


<form id="myform" method="post" action="">
  <div>
    <label for="NameQuery">Name</label>
    <input type="text" id="NameQuery" name="NameQuery" style="display: inline-block;">
  </div>
  <div>
    <label for="DoBQuery">Date of Birth</label>
    <input type="text" id="DoBQuery" name="DoBQuery" style="display: inline-block;">
  </div>
  <input type="submit" value="Search">
</form>
0 голосов
/ 25 октября 2019

вы должны удалить <div class="error__input"></div> тег после поля даты рождения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...