2012-04-04 3 views
1

既存のコードにjQueryを追加すると問題が発生しました。jQuery:名前でフォームを検出する方法

同じフォーム(同じフォーム名、同じフィールド、同じ送信ボタン、フォームに定義されているIDまたはクラスがありません)がページに数回出現したので、jQueryでフォームを検証する必要がありますフォームオブジェクトで、jQueryはどのフォームが送信されたかを伝えることができますか?あなたの応答のための

おかげで誰もが、問題は、あなたが#IDかを選択するために<form>タグに添付.classファイルしているかどうかは問題ではありません

+3

jqueryベースの機能を追加するためにページを変更する機能がある場合は、フォーム間で区別するために何かを追加しないでください。 –

+0

フォームは「同じ」と言いますが、どのフォームが送信されたかは気にするようです。検証される特定のフォームに依存する検証ルールが異なるためですか?私はすべての意味のある点で同じものであれば、どのフォームが提出されているのかについても気にしています。 –

+0

フォームページは他人と共有されているので、スクリプトファイルにはjQueryを追加することができます – June

答えて

1

は、それはあなたの選択と一緒にフォームのコンテキストを指定する必要がありますようになります:jQueryの関数はの文脈で、オプションの第二引数を取る

$('form').submit(function() { 
    var form = $(this); 
    var myInputValue = $("input[name='myinput']", form).val(); 
    // myInputValue is now the value of the myinput control that is 
    // within the submitted form 
}); 

。なお

選択。これは、送信されたフォーム内の入力要素だけを見つけるのに役立ちます。

ここにドキュメントを確認します。彼は現在、提出フォームの子を取得するために特別にjqueryのを使用していないにもかかわらず

http://api.jquery.com/jQuery/#expressioncontext

をNiftyDudeの答え@は、同じ問題になります。

+0

素晴らしい、それは私の問題を解決した。 – June

+0

ありがとう。 – June

0

:-)解決しました。

このお試しください:これは、特定のフォームまたは

0

$("form[name='IDENTIFIER']")を行動(私がしたいことです):

$('input[type="submit"]').click(function(event){ 
    event.preventDefault(); 
    var form = $(this).nearest('form'); 
    var inputs = $('input', form).not(this); 
    var isValid = true; 

    //validate inputs 
    if (isValid) form.submit(); 
}); 

コードによってはisValid = trueが必要ない場合があります。いずれかの要素が検証に失敗し、フォームの送信が続行されない場合はfalseに設定できます。あなたのためにこれを行うバリデーションライブラリを使用していて、有効であればフォームを提出する場合、それは必要ありません。

一部のバリデーターは、失敗した各項目に無効なクラスを設定し、そのクラスを持つフォームの入力があるかどうかをチェックして、フォームを提出する必要があるかどうかを判断できます。あなたの質問のコメントから

0
$('form').submit(function(e) { 
    // $(this) refers to the current form being submitted 

    // if you need to, for example iterate over all the inputs 
    var inputs = $(this)[0].getElementsByTagName('input'); // array of inputs 

    for(var i = 0; i < inputs.length; i++) { inputs[i].value; } 

    // this is important to avoid recursive submit 
    $(this)[0].submit(); 

    return false; 
}); 
0
$('form').submit(function(){ 
    var form = $(this); 
    var inputs = $('input', this); 
    var isValid = true; 

    //do validation on the inputs of the form submitted. 

    if (isValid) { 
     //do something 
    } 

    return false; 
}); 

を対象とする1ページに複数のフォームを持っている場合は、あなたが提出した入力をキャッチすることができ便利です

$('form').submit(function() { 
    //put your ajax submission code here... 
}); 
+0

なぜisValidが必要ですか? – June

+0

@Juneあなたが検証をするために使っているものによっては...できないかもしれません。これを反映するように更新されました。 –

+0

'isValid'は、入力フィールドが有効な状態であると判断したときに設定するフラグです。したがって、' //入力を検証します... 'というコメントです。 –

関連する問題