0

ここからjquery入力マスクを使用し、必要に応じてマスクを設定および設定解除するコードスニペットを使用します。

$('input.maskedInput').focus(function () {

        $(this).mask("999-999-9999");
    }).blur(function () {

        var numbers = $(this).val().replace(/-/g, '').replace(/_/g, '');
        $(this).val(numbers.toString()).unmask();
    });

これはjquery1.3.2で正常に機能しましたが、1.8.2にアップグレードすると、ユーザーがエラーなしでフィールドを離れたときにマスク解除が停止しました。マスクを解除し始めるために何を調整する必要がありますか?

4

1 に答える 1

0

unmask問題は、別のブラーハンドラー内のプラグインによってアタッチされたブラーハンドラーを(呼び出すことによって)削除することです。予測できない動作を回避するために、jQueryは、ハンドラーのいずれかを実行する前に、すべてのハンドラーへの参照をローカルに保存します。

  1. ぼやけが発生します。入力には2つのブラーハンドラー(あなたのものとプラグインからのもの)があります。
  2. jQueryはハンドラーの配列をコピーします。
  3. あなたのハンドラーが最初に実行されているようです。unmaskを呼び出し、2番目のハンドラーを削除します。ただし、ディスパッチングループ内にはまだ参照があります。
  4. jQueryは、マスクを復元する2番目のハンドラーを実行します。

このコードがjq1.3.2で動作する理由がわかりません。

これを回避するために、ぼかしイベントの即時伝播を停止できます。http://api.jquery.com/event.stopImmediatePropagation/

.blur(function (ev) {
        var numbers = $(this).val().replace(/-/g, '').replace(/_/g, '');
        $(this).unmask();
        ev.stopImmediatePropagation();
        $(this).val(numbers);
    })

http://jsfiddle.net/tarabyte/XgYSz/

于 2012-12-06T21:22:06.120 に答える