2012-06-21 1 views
0

Я пытаюсь подключить обработчик onBlur и onFocus к полю ввода SSN. Тем не менее, я вижу ошибку, говорящую, что объект не имеет метода «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> 

А вот Яваскрипт

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/

Проблемы, которые я видел, были отчасти то, что было упомянуто ранее вы использовали .он вместо .bind учитывая JQuery версии. Но также вы не настраивали своих обработчиков, а стреляли своими обработчиками. У вас было следующее:

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

, который вернет результат функции методу набора, который не является тем, что вы искали. Так что я изменил его на это:

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

Итак, теперь вы передаете обработчик методу набора, так что он будет срабатывать, когда событие происходит.

Надеюсь, что это имеет смысл.

+0

Спасибо, спинон, к сожалению, я не могу заставить скрипку работать. Я имею в виду, когда я ввожу '123123123' для второго элемента ввода класса ssn, я не вижу его автоформатированным. Я что-то пропустил? – Kiran

+0

Хорошо, я обновил jsfiddle (http://jsfiddle.net/H4Q5f/11/). Я просто смотрел на это с точки зрения того, чтобы заставить обработчиков стрелять. Поэтому я действительно не смотрел, почему код не работает. – spinon

+0

Спасибо, это прекрасно, теперь я понял проблему с кодом .. – Kiran

2

.on() функция была введена в JQuery 1.7. Код, который вы разместили выше, включает 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, либо включив соответствующий Javascript непосредственно перед закрывающим тегом '', либо используя событие готовности DOM. –

+0

Спасибо @ Энтони, я обновился, чтобы связать (http://jsfiddle.net/H4Q5f/). Тем не менее, я вернулся к той же проблеме, когда начался весь этот эксперимент. код $ (".ssn"). each (function() { var input = this; input.blur (TEST.mkwr.ssnOnBlurHandler (input)) }); в вышеуказанном jsfiddle не прилагается. Я делаю что-то неправильно? – Kiran

 Смежные вопросы

  • Нет связанных вопросов^_^