Проверка jQuery: Как проверить элемент без формы? - PullRequest
10 голосов
/ 17 сентября 2010

У меня есть форма с прикрепленной картой. Нажатие на карту добавляет скрытые входы в div в форме.

Я хочу, чтобы правило проверки проверяло, есть ли в этом div какие-либо скрытые элементы. До сих пор я мог делать это только с фиктивным элементом, который я должен был удалить вручную перед отправкой формы:

<form action="..." method="post" id="signup">
  <!-- ... -->
  <div id="zones_selected"><input type="hidden" name="dummy"></div>
  <!-- ... -->
</form>

$.validator.methods.zones = function (value, element, param) { return ($zone_holder.find('input[name!=dummy]').length > 0); };
$('#signup').validate({
  rules: {
    //...
    'dummy': 'zones'
  },
  //...
  submitHandler: function(form) { $(form).find('input[name=dummy]').remove(); form.submit(); }
});

Тем не менее, это оставляет желать лучшего для размещения ошибок, так как мой пользовательский метод валидатора, кажется, никогда не вызывает функцию unhighlight, и я чувствую себя грязно из-за того, что вставил ввод исключительно для проверки формы (не очень ненавязчивый).

Мне бы хотелось, чтобы не было лишних submitHandler и правила проверки наличия скрытых входов в элементе div с триггером unhighlight (например, если пользователь нажимает на карту, что создает новый скрытый ввод - исчезнувшее сообщение, сообщающее им об этом, исчезнет).

Какой лучший способ сделать это?

1 Ответ

3 голосов
/ 16 марта 2011

Я пытался сделать это в прошлом.Я не верю, что есть способ сделать это без внесения некоторых изменений в базу кода jquery.validator.

Когда вы смотрите на JQuery.Validator.js, проверьте функцию 'elements' в ln 423, вы увидите что-то вроде этого

return $([]).add(this.currentForm.elements)
            .filter(":input")
            .not(":submit, :reset, :image, [disabled]")
            .not( this.settings.ignore )
            .filter(function() {
                !this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this);

                // select only the first element for each name, and only those with rules specified
                if ( this.name in rulesCache || !validator.objectLength($(this).rules()) )
                    return false;

                rulesCache[this.name] = true;
                return true;
            });

Фильтр (": input") - это то, чтодаст тебе горе.

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