0

onBlur および onFocus ハンドラーを SSN 入力フィールドにアタッチしようとしています。ただし、オブジェクトにメソッド「ON」がないというエラーが表示されます。コードはhttp://jsfiddle.net/H4Q5f/にあります

ご覧のとおり、詳細を把握するためにコメントアウトしましたが、これまでのところうまくいきませんでした。どんな助けでも大歓迎です。便宜上、コードは次のとおりです。

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>

そして、ここにJavaスクリプトがあります

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());
4

2 に答える 2

2

jsfiddle のコードにいくつかの問題が見つかりました。これは、ハンドラーを起動してコードを解析するために機能している更新されたものです。ssn ロジックを少し修正する必要があるようですが、すべてがそこに到達しています。

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

私が見た問題の一部は、jquery バージョンで .bind の代わりに .on を使用する前に言及されたものでした。しかし、ハンドラーを設定するのではなく、ハンドラーを起動していました。あなたはこれを持っていました:

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

これは、関数の結果を set メソッドに返しますが、これは探していたものではありません。だから私はこれに変更しました:

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

これで、イベントが発生したときにハンドラーが起動するように、ハンドラーを set メソッドに渡します。

これが理にかなっていることを願っています。

于 2012-06-21T16:29:53.763 に答える
2

この.on()関数は jQuery 1.7 で導入されました。<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>上記のコードには、その機能を持たないjQuery 1.6.4 ( ) が含まれています。jQuery の最新バージョンにアップグレードするか (推奨) .bind()、古いバージョンの同等の機能を使用できます。

于 2012-06-21T15:57:16.200 に答える