2011-12-08 5 views
1
$('#submit').click(function() {   

    //Get the data from all the fields 
    var name = $('input[name=name]'); 

    //organize the data properly 
    var data = 'name=' + name.val();   

    //start the ajax 
    $.ajax({ 
     url: "process.php", 
     type: "GET", 
     data: data,  
     cache: false, 
     //success 
     success: function (html) {    
      //if process.php returned 1/true (send mail success) 
      if (html==1) {     
       //hide the form 
       $('.form').fadeOut('slow');     

       $('.done').fadeIn('slow'); 

      //if process.php returned 0/false 
      } else alert('error');    
     }  
    }); 

    //cancel the submit button default behaviours 
    return false; 
}); 


<form id="form1" method="post" action="process.php"> 
<div class="element"> 
    <label>Name</label> 
    <input type="text" name="name" class="text" /> 
</div> 
    <input type="submit" id="submit"/> 
</form> 

<form id="form2" method="post" action="process.php"> 
<div class="element"> 
    <label>Name</label> 
    <input type="text" name="name" class="text" /> 
</div> 
    <input type="submit" id="submit"/> 
</form> 

2つのフォームがあり、送信ボタンを押したときにそのうちの1つを送信したいと考えています。フォーム(form1またはform2)に基づいてvar "name"を自動的に宣言する方法はありますか?私は各フォームのルーチンが重複しないようにしたい。ページに複数のフォームがある場合、現在のフォームからvarを宣言するにはどうすればよいですか?

オプション1(私は、この作品を知っている - しかし、それは非常に "スマート" ではありません):

VAR名= $( '#のForm1の入力[名=名]');

var name = $( '#form2 input [name = name]');

オプション2(との助けを必要とする):

VAR名= $( '電流形提出 .input [名=名]');

ありがとうございます!

+0

同じIDを持つ送信ボタンが2つあるべきではありません。それは無効なマークアップです。 – FishBasketGordo

答えて

1

あなたのロジックを若干変更して、それぞれのフォームのsubmit()ハンドラを作成し、両方ともAJAXリクエストを完了する単一の処理関数に渡します。これにより、無効な2つの要素(#submitボタン)に同じIdを割り当てる必要もなくなります。

$("#form1, #form2").submit(function(e) { 
    completeForm($(this)); 
    e.preventDefault(); // stop the form submitting 
}); 

function completeForm($form) { 
    $.ajax({ 
     url: "process.php", 
     type: "GET", 
     data: 'name=' + $('input[name=name]', $form).val(),  
     cache: false, 
     success: function (html) {    
      //if process.php returned 1/true (send mail success) 
      if (html == 1) { 
       $form.fadeOut('slow'); 
       $('.done').fadeIn('slow'); 
      } 
      else 
       alert('error');    
     }  
    }); 
}); 
+0

素晴らしい作品です。ありがとうございました。 – vanarie

0

使用

$(this).parents("form").find("input[name=name]") 

または

$('input[name=name]',$(this).parents("form")) 
0

あなたはこのように、送信ボタンからフォームを見つけることができる:

$('#submit').click(function() { 
    var name = $(this).closest('form').find('input[name=name]'); 
    ... 
}); 
0

Karmran:Sの答えはそれを行うかにリファクタリングします

$('form').submit(function() { 
//do your formstuff 
return false;}); 

注:id:sは一意でなければなりません。#submitはDOMに2回あります。

関連する問題