jquery validate: пользовательское правило проверки - PullRequest
4 голосов
/ 09 сентября 2010

Я хочу, чтобы в этой форме поле 'Nombre' было обязательным, только если пользователь выбрал "Sí" в качестве ответа на вопрос выбора. Кроме того, если пользователь выбирает «Sí», следует указать либо адрес электронной почты, либо телефон (в телефоно).

Я использую плагин validate и не нашел документ, в котором закодировано похожее правило. Как я могу закодировать это?

Глядя на документацию , я думаю, что мне нужно кодировать либо required(dependency-expression), либо required(dependency-callback) метод, но я не знаю, какой или как, так как при нажатии на методы их документация отсутствует = /

<html> 
<head>

<style type="text/css">

label { width: 10em; float: left; }
label.error { float: none; color: red; padding-left: .5em; vertical-align: top; }
p { clear: both; }

em { font-weight: bold; padding-right: 1em; vertical-align: top; }
</style>



  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script type="text/javascript" src="http://dev.jquery.com/view/trunk/plugins/validate/jquery.validate.js"></script>

  <link rel="stylesheet" type="text/css" media="screen" href="mistylesheet.css" />
<script>
  $(document).ready(function(){
    $("#commentForm2").validate();
  });


  </script>

</head>
<body>
<form id="commentForm2">

     <center><table class="layouttable">

        <tr class='row1'><td> <b>&#191;Recomendar&iacute;a nuestros servicios a otra empresa o persona?  </b></td></tr>
        <tr class='row2'><td> 



        <select id = "recomiendaONo" name="recomiendaONo" class="required">
           <option value="">Seleccione su respuesta</option>
             <option value="Si">S&iacute;</option>
         <option value="No">No</option>

        </select>



        </td></tr>


  </table></center>    






<div class='margenrecomendaciones'>
<table>

<tbody>


<tr>



<td><div align="left">Nombre:</div></td> 

<td><div align="left"><input class="texto" id="nombreRecomendado" name="nombreRecomendado" type="text" size="30"/></div></td>

</tr>      




<td><div align="left">Email:</div></td>

<td><div align="left"> <input  class="texto" id="emailRecomendado" name="emailRecomendado" type="text" size="30"/></div></td>




</tr>

<tr>



<td><div align="left">Tel&eacute;fono:</div></td>

<td><div align="left"> <input class=" texto" name="telefonoRecomendado" id="telefonoRecomendado" type="text" size="30"/></div></td>




</tr>


</tbody>

</table>
</div>


    <center><input type="submit"></center>


</form>
</body>
</html>

Ответы [ 2 ]

0 голосов
/ 04 марта 2016

вам нужно создать собственное пользовательское правило и добавить этот класс в оба поля.

В вашем файле js:

jQuery.validator.addMethod("newRuleOr", function(value, element) {
        if($('#recomiendaONo').val() == 'Si'){
            return $('#emailRecomendado').val() != '' && $('#telefonoRecomendado').val();
        }
        return true;
   }, "Telefono o mail deben informarse."
);  

И в вашем HTML-коде вы должны добавить новые классы в поля.

<input class="texto newRuleOr" id="nombreRecomendado" name="nombreRecomendado" type="text" size="30"/>
...
<input  class="texto newRuleOr" id="emailRecomendado" name="emailRecomendado" type="text" size="30"/>

Еще один совет: никогда не используйте таблицы для оформления вашей страницы, используйте div, float и процент.

0 голосов
/ 09 сентября 2010

Вы можете взглянуть на их демонстрационную страницу и увидеть жестко запрограммированный пример, как заставить это работать. Поля просто отключены с помощью javascript, если выделение не выбрано и когда выбрано выделение, отключенные атрибуты удаляются.

Копирование пасты с демонстрационного сайта:

//code to hide topic selection, disable for demo
var newsletter = $("#newsletter");
// newsletter topics are optional, hide at first
var inital = newsletter.is(":checked");
var topics = $("#newsletter_topics")[inital ? "removeClass" : "addClass"]("gray");
var topicInputs = topics.find("input").attr("disabled", !inital);
// show when newsletter is checked
newsletter.click(function() {
    topics[this.checked ? "removeClass" : "addClass"]("gray");
    topicInputs.attr("disabled", !this.checked);
});

http://jquery.bassistance.de/validate/demo/

...