JQuery и плагин проверки - PullRequest
3 голосов
/ 15 июля 2009

Вместо того, чтобы написать свою собственную проверку, я подумал, что вместо этого я буду использовать JQuery, но я не нахожу это легким. У меня есть несколько вопросов, на которые, я надеюсь, кто-нибудь ответит. Во-первых, сообщения об ошибках появляются только при нажатии кнопки «Отправить». Как я могу заставить их появляться после выхода из каждого поля? Вот мой код для проверки.

Код:

$(document).ready(function(){
    $("#orderForm").validate({
        rules: {
            shipFirstName: {
                required: true,
            },
            shipFamilyName: {
                required: true,
            },
            shipPhoneNumber: {
                required: true,
            },
            shipStreetName: {
                required: true,
            },
            shipCity: {
                required: true,
            },
            billEmailAddress: {
                required: true,
            },
            billPhoneNumber: {
                required: true,
            },
            billCardNumber: {
                required: true,
            },
            billCardType: {
                required: true,
            },
        }, //end of rules
    }); // end of validate
    }); //end of function

Это мой HTML-код формы. Я не буду показывать стиль, но я изменил его, чтобы отобразить красный шрифт.

Код:

<form id="orderForm" method="post" action="x">
      <table id="formTable" cellpadding="5">
        <tr>
          <td>
            <h3>Shipping and Billing Information</h3>
          </td>
          <td>&nbsp;</td>
        </tr>
        <tr>
          <td><label for="shipFirstname">First Name</label></td>
          <td><input id="shipFirstName" type="text" name="shipFirstName" maxlength=
          "30" /></td>
        </tr>
        <tr>
          <td><label for="shipFamilyName">Surname</label></td>
          <td><input id="shipFamilyName" type="text" name="shipFamilyName" maxlength="30" /></td>
        </tr>
        <tr>
          <td><label for="shipPhoneNumber">Contact Telephone Number</label></td>
          <td><input id="shipPhoneNumber" type="text" name="shipPhoneNumber" maxlength="30" /></td>
        </tr>
        <tr>
          <td><label for="shipStreetName">Street Name</label></td>
          <td><input id="shipStreetName" type="text" name="shipStreetName" maxlength="30" /></td>
        </tr>
        <tr>
          <td><label for="shipCity">City</label></td>
          <td><input id="shipCity" type="text" name="shipCity" maxlength="30" /></td>
        </tr>
        <tr>
          <td><label for="shipPostalCode">Postal Code</label></td>
          <td><input id="shipPostalCode" type="text" name="shipPostalCode" maxlength="30" /></td>
        </tr>
        <tr>
          <td><label for="billEmailAddress">Email address</label></td>
          <td><input id="billEmailAddress" type="text" name="billEmailAddress" maxlength="30" /></td>
        </tr>
        <tr>
          <td><label for="billPhoneNumber">Contact Telephone Number</label></td>
          <td><input id="billPhoneNumber" type="text" name="billPhoneNumber" maxlength="30" /></td>
        </tr>
        <tr>
          <td><label for="fidelityCardNumber">Fidelity card</label></td>
          <td><input id="fidelityCardNumber" type="text" name="fidelityCardNumber" maxlength="30" /></td>
        </tr>
        <tr>
          <td><label for="billCardNumber">Credit Card Number</label></td>
          <td><input id="billCardNumber" type="text" name="billCardNumber" maxlength="30" /></td>
        </tr>
        <tr>
          <td><label for="billCardType">Credit Card Type</label></td>
          <td><select id="billCardType" name="billCardType">
            <option value="...">
              Choose your card...
            </option>
            <option value="visa">
              Visa
            </option>
            <option value="mastercard">
              Mastercard
            </option>
          </select></td>
        </tr>
        <tr>
          <td><label for="instructions">Instructions</label></td>
          <td>
          <textarea id="instructions" name="instructions" rows="8" cols="30">
Enter your requirements here or comments.
</textarea></td>
        </tr>
        <tr>
          <td colspan="2"><input id="submit" type="submit" name="Submit" value="Submit" </td>
        </tr>
      </table>
    </form>

Я также хочу использовать регулярные выражения для почтового индекса и карты верности. Как мне включить их в сценарий? Это правильно? Куда мне его положить?

$.validator.addMethod('shipPostalCode', function (value) {
    return /^[A-Z]{2}\d{1,2}\s\d{1,2}[A-Z]{2}$/.test(value);
    }, 'Please enter a valid Postal Code');
    $.validator.addMethod('fidelityCardNumber', function (value) {
    return /^[A-Z]{1}([A-Z]|\d){4}\s?([A-Z]|\d){5}\s?([A-Z]|\d){3}\d{1}(\!|\&|\@|\?){1}$/.test(value);
    }, 'Please enter a valid card number');

И последнее. Может ли этот сценарий быть легко помещен во внешний файл js? Я пытаюсь получить как можно больше из файла HTML.

Спасибо

Ответы [ 6 ]

2 голосов
/ 16 июля 2009

$ (документ) .ready (функция () { $ ( "# БЛАНК ЗАКАЗА"). Проверки ({ onfocusout: правда, правила: { shipFirstName: { требуется: правда, }, shipFamilyName: { требуется: правда, }, shipPhoneNumber: { требуется: правда, }, shipStreetName: { требуется: правда, }, shipCity: { требуется: правда, }, billEmailAddress: { требуется: правда, }, billPhoneNumber: { требуется: правда, }, billCardNumber: { требуется: правда, }, billCardType: { требуется: правда, }, }, // конец правил }); // конец проверки }); // конец функции

Это сделает так, что каждый раз, когда вы покидаете поле, он проверяет его автоматически :)

1 голос
/ 16 июля 2009

Используя вызов addMethod, вы фактически добавляете «тип» проверки, который можно использовать в вашем основном вызове метода validate.

$.validator.addMethod('postalCode', 
    function (value, element) 
    {
          return this.optional(element) || /^[A-Z]{2}\d{1,2}\s\d{1,2}[A-Z]{2}$/.test(value);
    }, 'Please enter a valid Postal Code');


$.validator.addMethod('creditCardNumber', 
    function(value, element) 
    {
        return this.optional(element) || /^[A-Z]{1}([A-Z]|\d){4}\s?([A-Z]|\d){5}\s?([A-Z]|\d){3}\d{1}(\!|\&|\@|\?){1}$/.test(value);
    }, 'Please enter a valid card number');

Поместите этот код в тот же файл JS, где у вас есть другой код проверки.

Затем измените вызов метода validate на:

$(document).ready(function(){
    $("#orderForm").validate({

        rules: {

                    //Your other rules

                    shipPostalCode: { postalCode: true },
                    fidelityCardNumber : { creditCardNumber : true }

                }

    })
   }
 );
1 голос
/ 16 июля 2009

Что касается добавления вашего собственного метода проверки, проверьте http://docs.jquery.com/Plugins/Validation/Validator/addMethod#namemethodmessage

Возможно, вы захотите изучить этот метод вместо этого:

jQuery.validator.addClassRules({
  name: {
    required: true,
    minlength: 2
  },
  zip: {
    required: true,
    digits: true,
    minlength: 5,
    maxlength: 5
  }
});

из примера на http://docs.jquery.com/Plugins/Validation/Validator/addClassRules#rules

Lastely, http://docs.jquery.com/Plugins/Validation означает, что вы также можете проверить, как это

что было бы чище и меньше JS для вас писать.

1 голос
/ 15 июля 2009

Это должно работать, но сначала вы должны заполнить что-то в форме. Попробуйте написать что-нибудь в Имя, затем удалите это и измените фокус.

0 голосов
/ 04 февраля 2014
jQuery.validator.addMethod("stateUS", function(value, element) {
    return this.optional(element) ||
    /^(?:A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])*$/.test(value);
}, "The specified US State is invalid");`

Для проверки двухбуквенных сокращений для штатов США и округа Колумбия.

Хотел прокомментировать вышесказанное, но недостаточно репов - в ответе Солти сказано использовать

onfocusout: true

Однако, в соответствии с документами (и попытками), это недопустимая настройка. http://jqueryvalidation.org/validate

Логическое значение true не является допустимым значением.

Если вы устанавливаете истинность на это значение, вам нужно установить функцию обратного вызова, которая получает два аргумента, элемент и событие - точно так же, как ответ Алистера.

0 голосов
/ 11 марта 2010
$('#myform').validate({ onfocusout: function(element) { $(element).valid(); } }; 

Это также будет работать.

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