2017-04-12 5 views
0

私はいくつかのカスタム値を持つフォームを持っており、それを傍受してバックエンドに渡されるデータを作成したいと思っています。jQuery:フォームを控除して送信し、データを構築する

は、私が検索したと私は実行して提出することができintercep:

$("#search-form").submit(function(e){ 
    e.preventDefault(); 
    var form = this; 
    form.submit(); 
}); 

手動で提出する前に、私はバックエンドに渡されたデータを構築したいです。例えば、私は、次のデータを構築したいと思います:

{ 
    search: { 
    someField1: "someValue1", 
    someField2: "someValue2", 
    someFields: [ 
     { 
     nestedField1: "value1", 
     }, 
     { 
     nestedField2: "value2" 
     } 
    ] 
    } 
} 

を明確にするために、私は完全に削除したいフォームから元のデータが、私はそれに何があるか気にしません。

+0

フォームは、URLエンコードされたペアを使用して転記されています。 JSONをPOSTしたいようです。 POST本体の外観を確認できますか? – dana

+0

[FormData Object API](https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects)を使用してみてください – mhodges

+0

あらかじめ設定して送信したデータを持つオブジェクトを作成したいユーザーが入力したデータの代わりに* * – zer00ne

答えて

0

フォームの送信を傍受し、キャンセルして、好きなものを送信するためにajaxコールを使用することができます。

var data = { 
 
    search: { 
 
    someField1: "someValue1", 
 
    someField2: "someValue2", 
 
    someFields: [{ 
 
     nestedField1: "value1", 
 
     }, 
 
     { 
 
     nestedField2: "value2" 
 
     } 
 
    ] 
 
    } 
 
}; 
 
$('#test').submit(function(e) { 
 
    e.preventDefault(); 
 
    e.stopPropagation(); 
 
    $.post(this.action, data); 
 
    return false; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form id="test" action="http://google.com" method="POST"> 
 
    <input type="text" /> 
 
    <input type="submit" /> 
 
</form>

+1

'e.stopPropagation()'と 'return false'は必要ありません。 – Mikey

+0

@Mikeyほとんどの場合、あなたは正しいと思います。しかし、e entがバブルする可能性があり、親の1人がpreventDefatをlistenすると、親ハンドラは停止しません。また、イベントが発生したかどうかを確認している場合は、ハンドラが返す。 'if(obj.fireEve t(eventName)!== false)' – bluehipy

関連する問題