2011-09-11 16 views
3

私は動的にテーブルを作成しており、動的に作成された日付テキストボックスでkeypressイベントをキャプチャしたいと考えています。私がpayment_date textkboxを1つしか持っていないのならそれは素晴らしいですが、私はたくさん持っています。私は.liveを見てきましたが、これを理解するにはあまりにも新しいです。誰かが私のために具体的なことができますか?ここで問題になっているテキストボックスとHTMLは次のとおりです。動的に作成されたテキストボックスのjQuery keypressイベント

 <?php 
     foreach($student_classes as $class): 
      if($student['student_id'] == $class['student_id']) {     
       $i = $class['registration_id']; 
       $deleted = FALSE; 
     ?> 
      <td> 
       <input type="text" 
       name="students[<?php echo $i ?>][registration_payment_date]" 
       id="payment_date[<?php echo $i ?>]" 
       value="<?= html($class['registration_payment_date']) ?>" 
       size='10' maxlength="10" 
       > 
      </td> 
     <?php endforeach; ?> 

のjQuery:

jQuery(document).ready(function() 
{ 
     var $payment_date = jQuery('#payment_date');  
     // Format the date as it is entered 
      $payment_date.keypress(function(event) { 
      DateFormat(this, this.value, event, false, '1'); 
     }); 

    // Check to make sure the date is valid 
     $payment_date.change(function() 
    { 
     if(dateValid(this.value) == false); 
     alert('The date is not valid'); 
    }); 
}); 

ありがとうございました! jQuery.live()は動作しますが

答えて

0

使用jQuery.live()それはDOM構造にwerearewill be要素セレクタに

http://api.jquery.com/live/

var $payment_date = jQuery('#payment_date');  
    // Format the date as it is entered 
    $payment_date.live("keypress",function(event) { 
     DateFormat(this, this.value, event, false, '1'); 
    }); 

// Check to make sure the date is valid 
    $payment_date.live("change",function() 
{ 
    if(dateValid(this.value) == false); 
    alert('The date is not valid'); 
}); 
+0

ありがとうございます。私はそれを複雑にしていました - 本当に使用するのはとても簡単です。私はそれをもう一度読むので、私はそれを理解することができます。 – Sara

4

を機能を追加し、それはJavaScript開発をこのようにアプローチしないことをお勧めします。

<input>要素を放出している間は、「payment_date」をクラスとして追加します。さて、

$(".payment_date").bind("keypress", function(event){ 
    DateFormat(this, this.value, event, false, '1'); 
} 

この利点は、payment_dateクラスを持つ任意の数のdivでうまくいくということです。

+0

あなたのソリューションは素晴らしいです、私はクラスを使用する必要があります。なぜjQuery.live()を使わないようにアドバイスしているのですか? – Sara

+0

live、そのクエリに一致する_any_要素を使用すると、将来作成される場合でもそのコールバックを処理します。 大きなコードベースがあり、誰かがjQuery.live( '。foo')を実行していると、あなたはこれを知らず、class = "foo"の要素を動的に作成します。今、jQuery.bindを使用するとうまくいきます。そうしないと、以前のコールバックも実行されます。 それは私の理由です、他にも理由があります - http://stackoverflow.com/questions/1368223/performance-difference-between-jquerys-liveclick-fn-and-clickfn/1368310#1368310 – antileet2

0

JQuery live()メソッドは廃止され、1.9から削除されました。

動的に作成された要素にイベントをバインドするには、on()メソッドを使用する必要があります。

関連する問題