2012-01-27 5 views
0

맞춤 속성이 함수인지 테스트 할 수 있습니까? 내가 jquery의 isFunction 메서드를 사용하여 시도했지만이 시나리오와 함께 작동하지 않는 것. 예를 들어jquery - 속성에 대한 인라인 자바 스크립트 확인

는 :

<input id="test" class='date' oncomplete="function() { alert('i am a function'); }" type="text" /> 

<script> 
    $(".date").livequery(function() { 
     var onComplete = $(this).attr("oncomplete"); 
     if ($.isFunction(onComplete)) { 
      $(this).mask("99/99/9999", { completed: onComplete }); 
     } else { 
      $(this).mask("99/99/9999"); 
     } 
    }); 
</script> 

나는 몇 날짜 필드가 있습니다. 나는 그들에게 몇 가지 특별한 행동을주기 위해 노력하고있다. 나는 그들이 필요로하는 행동으로 그들을 설정하기 위해 별도의 jquery selector를 가질 수 있다는 것을 알고있다. 그러나 이것을하기위한 인라인 방식이 있는지 알고 싶었습니다.

답변

1

DOM 요소의 속성을 가져올 때 jQuery는 DOM 이벤트 (예 : onclick, onkeyup 등) 인 경우 함수로 변환하지만 사용자 정의 이벤트 인 경우는 예외로 변환합니다 (예 : http://jsfiddle.net/FJWhp/1/).

이렇게하지 않는 것이 좋습니다. JavaScript에 함수를 넣고 그 이름을 저장하는 데 data- 속성을 사용하는 것이 좋습니다. 이처럼

는 :

<input id="test" class='date' data-complete="dateComplete" type="text" /> 

<script> 
    function dateComplete() { 
     alert('i am a function'); 
    } 

    $(".date").livequery(function() { 
     var onComplete = $(this).data("complete"); 
     if ($.isFunction(window[onComplete])) { 
      $(this).mask("99/99/9999", { completed: window[onComplete] }); 
     } else { 
      $(this).mask("99/99/9999"); 
     } 
</script> 

또는 더 나은 아직, 단지 자바 스크립트의 기능이 전혀 DOM 요소에 첨부하지 않습니다.

<input id="test" class='date' type="text" /> 

<script> 
    $(".date").livequery(function() { 
     $(this).mask("99/99/9999", { 
      completed: function(){ 
       alert('i am a function'); 
      } 
     }); 
</script> 
+0

두 번째 예에서 jquery가 DOM 요소에 연결되어 있지 않은 경우 jquery가 "완료"데이터를 얻는 방법은 무엇입니까? – Brosto

+0

@Brosto : 복사 및 붙여 넣기에 실패한 답변을 편집했습니다. 두 번째 예제에서는 DOM 요소에 대한 데이터가 없으며 함수는 익명입니다. 이 기능에서는 수행 할 작업을 결정할 수 있습니다. –

+0

첫 번째 예제가 제대로 작동하지 않습니다. 좀 봐 줄래? http://jsfiddle.net/VBGhs/ – Brosto

1

eval()을 사용해야합니다. 속성의 인라인 JS는 단순한 문자열입니다.

나는 인라인 JS를 전혀 사용하지 말 것을 제안합니다. 읽고 쓰는 것이 좋지 않고 유지 보수/디버그하기가 더 어렵습니다.

관련 문제