2011-09-11 5 views
3

동적으로 테이블을 생성하고 동적으로 생성 된 날짜 텍스트 상자에서 keypress 이벤트를 캡처하려고합니다. 내가 하나의 payment_date textkbox 만 있으면 멋지지만 많은 것을 가지고 있습니다. 나는 살아있다. 그러나 나는 이것을 알아 내기에는 너무 새롭다. 누군가 나를 위해 구체적 일 수 있습니까? 여기에 문제의 텍스트 상자와 HTML은 다음과 같습니다동적으로 생성 된 텍스트 상자에서 jQuery 키 누르기 이벤트

 <?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'); 
    }); 
}); 

감사합니다!

답변

0

사용 jQuery.live() 그것은 DOM 구조 were, arewill 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

jQuery.live() 동안 이런 식으로 자바 스크립트 개발에 접근하지 않는 것이 좋습니다 작동되는 요소 선택기에 기능을 추가합니다.

요소 <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')를 사용한다고하면이 사실을 모르고 클래스 = "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() 메서드를 사용해야합니다.

관련 문제