1

jQuery Masked Input Plugin のテキスト入力が正常に機能するのに問題がありますが、マスクされたテキスト ボックスにテキストを貼り付けると、 Completedイベントをキャッチできません。

プラグイン サイトの例:

<script type="text/javascript">

    jQuery(function ($) {
         $("#testtext").mask("99/99/9999", { completed: function () {
             alert("You typed the following: " + this.val());
         } });
     });
</script>

似たようなことをした人はいますか?

4

2 に答える 2

4

私は終わりました:

  1. 貼り付けイベントへのバインディングと
  2. 次に、短いsetTimeoutの後に貼り付けられたval() -ue を 取得します (貼り付けられたデータは、イベントがトリガーされたときにコントロールに入らないため)。
  3. 最終的に完了と同じメソッドを呼び出す

// mask fields
$('#Ssn').mask("999-99-9999",
    { completed: function () { lookupPersonAsync(this.val()); } }
);
// fix paste bug
$('#Ssn').bind('paste', function () {
    setTimeout(function () {
        var ssn = $('#Ssn').val();
        if (ssn.length == 11) lookupPersonAsync(ssn);
    }, 100);
});

もっと簡単な解決策があるかもしれませんが、すべてのブラウザーでクリップボードのデータにアクセスするのはそれほど簡単ではないことが判明したため、これが最も簡単に思えました。

于 2011-09-26T22:59:21.063 に答える
0

貼り付け時に Completed イベントをトリガーするために私がしたことは次のとおりです。それはきれいな解決策ではないか、絶対に確実ではないかもしれませんが、私の目的には十分です.

また、2 つの別々のマスクを使用して行った限定的なテストでも、問題は発生しませんでした。私が使用したマスクはaa99aaa999(999) 999-9999でした。

貼り付けハンドラーの bind イベントを更新しただけです。このロジックが行うのは、カーソルの位置が >= マスクの長さであることを確認することだけです。その場合、関数を渡したと仮定して、完了した関数をトリガーします。

.bind(pasteEventName, function() {
                        setTimeout(function() { 
                            input.caret(checkVal(true)); 
                            if(checkVal(true) >= len && settings.completed){
                                settings.completed.call(input);
                            }
                        }, 0);

これが誰かを助けることを願っています。

于 2012-06-01T16:25:23.033 に答える