jQuery Validate: удалить элемент ПОСЛЕ проверки ПЕРЕД отправкой?

У меня есть SVG-карта города, которая при нажатии создает скрытые элементы в div в моей форме.

Я использую плагин проверки jQuery для проверки своей формы.

Чтобы убедиться, что пользователь щелкнул область карты, я подумал создать фиктивный скрытый элемент внутри, где находятся обычные скрытые элементы, и применить к нему правило проверки. Я написал собственное правило проверки для проверки количества скрытых элементов (указывающих, что пользователь щелкнул где-то на карте). Это правило таково:

$.validator.methods.zones = function (value, element, param) {
   return ($('#search_form #zone-selectors input').length > 1); // 1 instead of 0 to account for the dummy element
};

<div id="zone-selectors">
  <input type="hidden" name="dummy">
</div>

Однако я не могу разрешить отправку этого фиктивного элемента вместе с остальной частью формы; Мне нужно удалить его ПОСЛЕ того, как форма была проверена, но ДО отправки формы. Естественно, я подумал использовать вариант submitHandler для validate():

// ...
submitHandler: function(form) {
   $(form).find('input[name=dummy]').remove();
   $(form).submit();
},
// ...

... но это, кажется, создает бесконечный цикл, и мой браузер отключает скрипт. Что я делаю не так?


person neezer    schedule 09.09.2010    source источник


Ответы (2)


submitHandler нуждается в настройке, например:

submitHandler: function(form) {
   $(form).find('input[name=dummy]').remove();
   form.submit();
}

Вызов триггера jQuery .submit() вызывает повторную проверку и бесконечный цикл... вы хотите вызвать встроенная функция .submit() здесь.

person Nick Craver    schedule 09.09.2010
comment
Теперь форма вообще не отправляется...? Однако скрытый элемент удален, поэтому я знаю, что вызывается submitHandler. - person neezer; 09.09.2010
comment
@neezer - Есть ли в форме действие? Или вы пытаетесь отправить через ajax? - person Nick Craver; 09.09.2010
comment
@nick У него есть действие. Я хочу обычную отправку, а не отправку Ajax. - person neezer; 09.09.2010
comment
@neezer - у вас есть ссылка на страницу, которую я вижу? - person Nick Craver; 09.09.2010
comment
@nick - Конечно, как только я публикую ссылку, я не могу воспроизвести проблему. Похоже, это работает. Спасибо. - person neezer; 09.09.2010

Кажется, это сработало для меня, когда приведенный выше ответ не сработал. Возможно, это связано с версиями jQuery и jQuery Validation.

submitHandler: function(form) {
   $('input[name=dummy]', form).remove();
   form.submit();
}
person freak3dot    schedule 01.05.2014