плагин формы с несколькими формами | отправить возвращает последнюю форму - PullRequest
0 голосов
/ 17 октября 2011

Я пишу свой собственный плагин проверки формы. Я заставляю работать с несколькими формами на странице. когда форма отправлена, она подтверждается. У меня проблема в том, что в плагине я могу просматривать элементы формы, но в .submit я могу получить доступ только к последней форме набора, отправленной в j! Uery. мой HTML это 2 формы. on имеет вход с именем num, а другой - с именем alpha. у них обоих есть своя собственная кнопка отправки. ниже основной раздел плагина jQuery. для плагина я просто отправляю форму. o.attr хранит имя атрибута с правилами валидации.

    var options =  $.extend(defaults, options);
    return this.each(function() 
    {
    form=this;
    var o = options;
    //this gets me both inputs on page load
    $('['+o.attr+']', form).each(function()
    {
        var val=$(this).val()
        alert($(this).attr('name'))
    })
    //on submit It will alert the last forms input regardless of what form i submited
    $(this).submit(function()
    {
        var o = options;
        $('['+o.attr+']', form).each(function()
        {
            var val=$(this).val()
            alert($(this).attr('name'))
        })
        return false;
    })
    });

Ответы [ 2 ]

2 голосов
/ 17 октября 2011
form=this;

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

Следовательно, к тому времени, когда вызывается функция submit form всегда будет содержать последнее значение this независимо от того, какая форма была отправлена.

(Используйте инструмент lint в своем коде или браузер, поддерживающий строгий режим ECMAScript Fith Edition., чтобы обнаружить случайные глобалы.)

0 голосов
/ 17 октября 2011

Я чувствую, что ты делаешь это слишком сложным для себя.Будет ли что-то так просто, как эта работа?

$forms = $( 'form' );

$forms.submit(
    $( this ).find( '[' + o.attr + ']' ).each( function(){
        var val = this.value;
        alert( this.getAttribute( 'name' ) );
    });
    return false;
);
...