3 つのフォームがある Web ページがあります。ネストされておらず、1 つずつ並んでいます (ほとんど同じで、異なるのは隠し変数 1 つだけです)。ユーザーは 1 つのフォームにのみ入力し、1 つの JS スクリプトだけですべてのフォームを検証したりしたいと思います。
では、ユーザーがフォーム#1 の送信ボタンをクリックしたときに、js スクリプトがフォーム#1 のフィールドのみを処理するようにするにはどうすればよいでしょうか。 $(this).parents と関係があると思われますが、どうすればよいかわかりません。
私の検証スクリプト (他の場所で単一のフォームのみで使用したもの) は次のようになります。
$(document).ready(function(){
$("#submit").click(function(){
$(".error").hide();
var hasError = false;
var nameVal = $("#name").val();
if(nameVal == '') {
$("#name").after('Please enter your name.');
hasError = true;
}
if(hasError == false) {blah blah do all the processing stuff}
では、 $("#name").val() のようなものを $(this).parents('form').name.val() に置き換える必要がありますか? それとも、これを実行するより良い方法がありますか?
ありがとう!
ベストアンサー1
次のようにフォームを選択できます。
$("#submit").click(function(){
var form = $(this).parents('form:first');
...
});
ただし、通常は、フォーム自体の送信イベントにイベントをアタッチする方が適切です。これは、フィールドの 1 つから Enter キーを押して送信するときにもイベントがトリガーされるためです。
$('form#myform1').submit(function(e){
e.preventDefault(); //Prevent the normal submission action
var form = this;
// ... Handle form submission
});
フォーム内のフィールドを選択するには、フォーム コンテキストを使用します。例:
$("input[name='somename']",form).val();