2012-06-21 6 views
0

SSN 입력 필드에 onBlur 및 onFocus 처리기를 연결하려고합니다. 그러나 개체에 'ON'메서드가 없다는 오류가 나타납니다. 코드는 다음에 있습니다 http://jsfiddle.net/H4Q5f/jquery 함수를 바인딩 할 수 없습니다.

자세히 알 수 있듯이, 세부 사항을 파악하기 위해 주석 처리 한 결과, 지금까지 행운이 없었습니다. 어떤 도움을 주셔서 감사합니다.

HTML : 여기

<!doctype html> 
<html lang="en"> 

<head> 
<meta charset="utf-8" /> 
<title>Test Page</title> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<meta name="apple-mobile-web-app-capable" content="yes"> 
<meta name="apple-mobile-web-app-status-bar-style" content="black" /> 

<link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css" /> 
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script> 
<script src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script> 
<script type="text/javascript" src="../../appjavascript/ssa/mkwr/mytest.js"></script> 

</head> 

<body> 
    <div data-role="page" id="MyTestPage"> 
     <div data-role="header" data-position="fixed" data-logo="true" data-tap-toggle="false" data-fullscreen="false" > 
      <h1> Page Title </h1> 
     </div> 

     <div data-role="content"> 
      <div class="content-primary divcontent"> 
       <h1 class='h1title'>Using This App</h1> 
       <p> Here are the instructions </a> 
       </p> 
      </div> 

       <div class="inputdata"> 
        <br /> <br /> 
        <input type="text" name="accessCode" id="AccessCode" value="" placeholder="Access Code:" /> <br /> 
        <input type="text" id="ssn1" class="ssn" value="" placeholder="SSN1:" /> <br /> 
        <input type="text" id="ssn2" class="ssn" value="" placeholder="SSN2:" /> <br /> 
       </div> 
       <input type="button" id="myalert" value="Next" /> 
     </div> 
     <!-- /content --> 
</body> 
</html> 

그리고이 .on() 기능을 jQuery를 1.7에 도입 된

if (typeof TEST == "undefined" || !TEST) { 
    var TEST = {}; 
} 

(function() { 
    TEST.mkwr = { 
     init : function() { // this is a public function 
     $("[data-role='page']").on("pagebeforeshow", TEST.mkwr.hideError()); 
     $("[data-role='page']").on("pageshow", TEST.mkwr.setHandlers()); 
     }, 

     // On Blur, we need to add the '-'s if they doesn't exist so the user 
     // view edit the entered value formatted 
     ssnOnBlurHandler : function(input) { // Auto format SSN on blur 
      if ($(input).val().length == 9) { 
       var _ssn = $(input).val(); 
       var _ssnSegmentA = _ssn.substring(0, 3); 
       var _ssnSegmentB = _ssn.substring(3, 5); 
       var _ssnSegmentC = _ssn.substring(5, 9); 
       $(input).val(
         _ssnSegmentA + "-" + _ssnSegmentB + "-" + _ssnSegmentC); 
      } 
     }, // _ssnOnBlurHandler 

     // On focus, we need to remove the '-'s if they exist so the user 
     // can edit the entered value 
     ssnOnFocusHandler : function(input) { 
      // allow backspace, tab, delete, arrows, numbers and keypad numbers ONLY 
      if ($(input).val().length == 11) { 
       var _ssn = $(input).val(); 
       var _ssnSegmentA = _ssn.substring(0, 3); 
       var _ssnSegmentB = _ssn.substring(4, 6); 
       var _ssnSegmentC = _ssn.substring(7, 11); 

       $(input).val(_ssnSegmentA + _ssnSegmentB + _ssnSegmentC); 
      } 
     }, // _ssnOnFocusHandler 

     // Hide all errors 
     hideError : function() { 
      $(".error").hide(); // Hide all errors 
     }, 

     setHandlers : function() { 
      alert("Set Handlers"); 
      // $(".ssn").each(function() { 
     // var input = this; input.blur(TEST.mkwr.ssnOnBlurHandler(input)) 
     // }); 
     // $(".ssn").each(function() { 
     // var input = this; input.focus(TEST.mkwr.ssnOnFocusHandler(input)) 
     // }); 
    } 
    }; 
})(); // end the anonymous function 

$("[data-role='page']").bind("pageinit", TEST.mkwr.init()); 

답변

2

jsfiddle에서 코드와 관련된 몇 가지 문제점을 발견했습니다. 다음은 처리기를 실행하고 코드를 파싱하기 위해 작동하는 업데이트 된 것입니다. 귀하의 ssn 로직을 약간 수정해야 할 수도 있지만 모든 것이 거기로 연결됩니다. 내가 본

http://jsfiddle.net/H4Q5f/10/

문제는 당신이 JQuery와 버전 주어진 .bind 대신 CSTE 연구진은 사용되기 전에 언급 한 것을 부분적으로 있었다. 그러나 당신은 당신의 손잡이를 세우는 것이 아니라 당신의 손잡이를 발사하는 것입니다. 이 있었다 : 당신이 찾고 있던 것이 아닙니다 set 메소드에 함수의 결과를 반환

input.bind("blur",TEST.mkwr.ssnOnBlurHandler(input)) 

. 그래서 이것을 다음과 같이 변경했습니다 :

input.bind("blur",TEST.mkwr.ssnOnBlurHandler) 

그래서 지금 이벤트가 발생할 때 실행되도록 핸들러를 set 메소드에 전달합니다.

희망적입니다.

+0

감사합니다 spinon, 불행히도, 나는 바이올린을 작동시킬 수 없습니다. 나는 ssn 클래스의 두 번째 입력 요소에 '123123123'을 입력하면 자동 형식이 표시되지 않는다는 것을 의미합니다. 내가 놓친 게 있니? – Kiran

+0

Ok jsfiddle (http://jsfiddle.net/H4Q5f/11/)을 업데이트했습니다. 나는 핸들러에게 불을 붙이는 관점에서 실제로 그것을보고있었습니다. 따라서 코드가 작동하지 않는 이유를 실제로 보지 않았습니다. – spinon

+0

감사합니다.이 코드는 완벽합니다. 이제 코드 문제가 생겼습니다. – Kiran

2

자바 스크립트를하다 편의를 위해, 여기에 코드입니다. 위에 게시 한 코드에는 해당 기능이없는 jQuery 1.6.4 (<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>)가 포함되어 있습니다. 이전 버전의 경우 최신 버전의 jQuery (권장)로 업그레이드하거나 동등한 기능 (.bind())을 사용할 수 있습니다.

+0

감사합니다. 실제로 사용하기 전에 실제로 사용하려고했습니다. 하지만 문제는 setHandlers 함수를 호출하지 않는다는 것입니다. – Kiran

+0

@Kiran 이전 버전에 해당하는 함수는'.bind()'입니다 (코드에서'.on()'을 사용하기 위해 다른 이전 함수와 일치하는'.on()'을 사용하는 다른 방법이 있습니다) , 그래서 먼저 사용하려고합니다. 또한 닫힌'' 태그 바로 앞에 관련 자바 스크립트를 포함 시키거나 DOM 준비 이벤트를 사용하여 DOM이로드 된 후 코드가 실행되고 있는지 확인하십시오. –

+0

감사합니다 @Anthony, bind (http://jsfiddle.net/H4Q5f/)로 업데이트했습니다. 그러나 나는이 모든 실험이 시작된 같은 문제로 돌아왔다. 코드 $ (".ssn"). 각각 (function() { var input = this; input.blur (TEST.mkwr.ssnOnBlurHandler (input)) }); 위의 jsfiddle에서 이 붙어 있지 않습니다. 내가 뭔가 잘못하고 있는거야? – Kiran

관련 문제