3

どの送信ボタンが押されたかに応じて、2 つの別々の関数を起動しようとしています。「submit1」をクリックするとコンソールログに「openMailer_1」が表示されますが、「submit2」をクリックすると「openMailer_2」ではなく「openMailer_1」が再び表示されます。ここで何が間違っていたのか分かりますか?

$('*[id^=submit]').live('click', function() {

  var id = $(this).attr('id').slice(-1);
  console.log(id);  

  $('#result_form').validate({
    invalidHandler: function(form) { 
    //
    },              
    submitHandler: function(form) {             
      openMailer['openMailer_' + id](); 
    }
  });
});

var openMailer = {
  openMailer_1: function() {
    console.log('openMailer_1');    
  },

  openMailer_2: function() {
    console.log('openMailer_2');
  }
}


<form id="result_form" action="" method="post"> 
  <input type="submit" name="btn_send" id="submit1" value="submit1" />
  <input type="submit" name="btn_send" id="submit2" value="submit2" />
</form>
4

1 に答える 1

2

そうでない場合は、クリックイベントを登録する必要が$(document).ready()あります。これで目的の効果が得られますが、ここではさらに多くのことが行われています。

.validate()ドキュメントの読み込み時に 1 回だけ呼び出す必要があります。これにより、そのフォームの検証ルールが登録され、送信ハンドラーを使用してクリックされたボタンを特定できます。例については、この jsfiddleを参照してください。idグローバルスコープで宣言したことに注意してください。これについてはおそらくもっと良い方法がたくさんありますが、正しい方向に向けられるはずです。

それが役立つことを願っています。

于 2013-08-23T02:16:02.413 に答える