0

独自のフォーム検証プラグインを作成しています。ページ上で複数のフォームを操作するようにしています。フォームが送信されると、検証されます。私が抱えている問題は、プラグインではフォームの要素を調べることができるが、.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;
    })
    });
4

2 に答える 2

2
form=this;

form を宣言するのを忘れたvarので、これは偶発的なグローバル変数であり、期待どおりにクロージャに取り込まれません。

したがって、submit関数が呼び出されるまでには、送信されたフォームに関係なくform、常に最後の値が保持されます。this

(コードでlintツールを使用するか、ECMAScript Fith Edition Strict Mode をサポートするブラウザーを使用して、偶発的なグローバルを検出します。)

于 2011-10-17T00:40:25.127 に答える
0

あなたは自分自身でこれを複雑にしすぎているように感じます。このような単純なものは機能しますか?

$forms = $( 'form' );

$forms.submit(
    $( this ).find( '[' + o.attr + ']' ).each( function(){
        var val = this.value;
        alert( this.getAttribute( 'name' ) );
    });
    return false;
);
于 2011-10-17T01:05:14.093 に答える