Вопрос по jquery – Проверка входных данных массива с помощью плагина проверки jquery

13

У меня есть следующая форма. Я пытаюсь проверить входные данные с помощью плагина проверки jquery. Я пробовал некоторые коды, но это не работает. Когда я нажимаю кнопку отправки, она просто переходит к действию формы.

<form name="voucherform" action="something" method="post">
  <input type="text" name="reg_number[]" value="" />
  <input type="text" name="reg_number[]" value="" />
  <input type="text" name="reg_number[]" value="" />
  <input type="submit" name="submit" value="submit" />

Не могли бы вы показать мне, как проверить вышеуказанную форму с помощью плагина проверки jquery?

Спасибо :)

Мой код Jquery:

 <script type="text/javascript" src="<?php echo base_url();?>support/datepicker/js/jquery-1.7.2.min.js"></script>
 <script type="text/javascript" src="<?php echo base_url();?>support/js/jquery.validate.js"></script>

 <script>
  $(document).ready(function() {

// validate signup form on keyup and submit
var validator = $("#voucherform").validate({
    showErrors: function(errorMap, errorList) {
        $(".errormsg").html($.map(errorList, function (el) {
            return el.message;
        }).join(", "));
    },
    wrapper: "span",
    rules: {

        reg_number[]: {
            required: true,
            minlength: 2,
            remote: {
                url: '<?php echo base_url();?>sales/invoice_check', async: false,
                type: 'post'
            },

        }
    },
    messages: {

        reg_number[]: {
            required: "Enter Reg Number",
            minlength: jQuery.format("Enter at least {0} characters"),
            remote: jQuery.format("{0} is already in use")
        },
    }
    });
    });
   </script>

Ваш Ответ

5   ответов
16

You aren't selecting the form element properly.

You're looking for a form with id "voucherform" and your markup does not contain one. You probably want to change your selector to:

$("form[name='voucherform']").validate({ ... });

Brackets ([]) are not valid in JavaScript identifiers. This means that your script is not being parsed correctly. To resolve this, just wrap those fields that have brackets in them in quotes, i.e. 'reg_number[]' instead of reg_number[].

Подправлен проверочный код:

var validator = $("form[name='voucherform']").validate({
    showErrors: function(errorMap, errorList) {
        $(".errormsg").html($.map(errorList, function(el) {
            return el.message;
        }).join(", "));
    },
    wrapper: "span",
    rules: {
        'reg_number[]': {
            required: true,
            minlength: 2,
            remote: {
                url: '<?php echo base_url();?>sales/invoice_check',
                async: false,
                type: 'post'
            }

        }
    },
    messages: {
        'reg_number[]': {
            required: "Enter Reg Number",
            minlength: jQuery.format("Enter at least {0} characters"),
            remote: jQuery.format("{0} is already in use")
        }
    }
});

Example: http://jsfiddle.net/hfrhs/

Он прав, это решение не работает .. если вы никогда не фокусируете другие входные данные, проверка работает только для первой строки элементов.
Я извиняюсь, но я думал, что ваше решение работает отлично, но я только что заметил, что если вы поместите значение в первый вход, а затем нажмете "Отправить", система не покажет сообщения об ошибках, оставляя оставшиеся входные данные пустыми :( black_belt
@black_belt: Правильно ли работает ваше удаленное правило? Если это не удается, это может привести к сбою остальной части проверки.
Похоже, что плагин не может работать в этом случае ... есть еще одна запись stackoverflow ... что-то должно быть изменено в jquery.validate.js:stackoverflow.com/a/4136430/432513 и особенно этот URL:codeboss.in/web-funda/2009/05/27/…
@mlwacosmos: вы видите проблему в примере?
0

и только один из них является обязательным.

<input type="checkbox" value="0" name="is_appraisal[0]" class="is_appraisal_f siblingcheckbox" id="is_appraisal_f">

<input type="checkbox" value="1" name="is_appraisal[1]" checked="checked" class="is_appraisal_s siblingcheckbox" id="is_appraisal_s">

Проверка Jquery для этого:

       $.validator.addMethod("onechecked,", function (value, elem, param) {
            if ($(".siblingcheckbox:checkbox:checked").length > 0) {
                return true;
            } else {
                return false;
            }
        }, "You must select at least one!");

        $.validator.addClassRules("siblingcheckbox", {
            onechecked: true
        });
5

JQuery-проверка-для-массив входного текста-элементы, В jquery.validate.js мы можем найти функцию с именем checkForm, мы должны изменить ее, как показано ниже:

checkForm: function() {
  this.prepareForm();
  for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
   if (this.findByName( elements[i].name ).length != undefined && this.findByName( elements[i].name ).length > 1) {
     for (var cnt = 0; cnt < this.findByName( elements[i].name ).length; cnt++) {
       this.check( this.findByName( elements[i].name )[cnt] );
     }
    } else {
     this.check( elements[i] );
    }
   }
  return this.valid();
}
Работал как брелок для многомерного массива также
6

https://stackoverflow.com/a/17643385/146553

если имена ваших элементов имеют индексы, они рассматриваются как уникальные имена req_number [0] req_number [1] ЭСТ ....

1

 'reg_number[]':{ 
    required:function(){
      return $("input[name='reg_number[]']").filter(function(){
        return $.trim($(this).val()).length>0
      }).length==0
    }
 }

Надеюсь, это мало чем поможет.

Похожие вопросы