2016-10-26 4 views
1

私はjQueryを使っています。これはかなり大規模な方法とフォーム(form1from2)の2であるslectorが複数のidで動作する場所から実際のIDを取得する

$('#from1, #form2').submit(function() { 
    .... 
    .... 

    //is there any way to know the actual id (that is - form1 or form2) 
    //for which the submit() method is called 
} 

私は書きたくないように、ほぼ同じコードを共有する - 私はこのような2つのセレクタ上で動作Javascriptの方法を持っています各フォーム別に複数のsubmit()メソッド。だからsubmitメソッドが呼び出される実際のidを取得する方法があります。

答えて

1
$(this).attr('id') 

$(this)submitイベントをトリガしたformを指します。

これは、すべてのイベントハンドラで共通の構文です。 thisは、イベントをトリガー要素を指すようになりますし、あなただけの私たちは<form>要素がthisあると仮定すると.attr('id')

3

を使用していたかのように、それにjQueryの構文で構築された多くを使用することができるよう$(this)はjQueryオブジェクトになります匿名メソッドの内部に、彼らはあなたの(非常に要約)からのものであると見て、あなたは簡単に使用することができ、コードを掲載:

$('#form1, #form2').submit(function(){ 
    let formID = this.id; 

    // or (expensively, redundantly): 
    // formID = $(this).prop('id'); 
    // or: 
    // formID = $(this).attr('id'); 
}); 

、しかし、<form>の子要素がthisであれば、あなたは代わりに次のものを使用できます:

$('#form1, #form2').submit(function(){ 
    let formID = this.form.id; 
}); 

セレクタの入力ミスであると思われるものを修正しました。#from1#form1に変更されています。

また、コメントで正しく指摘されているように、letは変数を宣言するための比較的新しいES6の代替手段です。古いブラウザをサポートする必要がある場合は、代わりにvarを使用する必要があります。

+0

古いブラウザをサポートする必要がある場合は、 'let'は比較的新しいことを忘れないでください。 http://caniuse.com/#feat=let –

関連する問題