Плагин jQuery Maskedinput: завершенное событие после вставки не работает - PullRequest
1 голос
/ 09 июня 2011

У меня проблемы с использованием jQuery Плагин для маскированного ввода Текстовый ввод успешно работает, но если я вставляю текст в замаскированное текстовое поле - я не могу перехватить событие Завершено .

Пример с сайта плагина:

<script type="text/javascript">

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

Кто-нибудь делал подобное?

Ответы [ 2 ]

3 голосов
/ 27 сентября 2011

Я закончил:

  1. привязка к событию paste и
  2. затем получить вставленный val () -ue после краткого setTimeout (поскольку вставленные данные не попадают в элемент управления при запуске события) и
  3. наконец, вызывает тот же метод, что и complete

// 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);
});

Возможно, существует более простое решение, но оно кажется самым простым, поскольку оказывается, что получить данные буфера обмена не так просто во всех браузерах.

0 голосов
/ 01 июня 2012

Вот что я сделал, чтобы вызвать событие Completed после вставки. Это может быть не решение для симпатий, или защита от каких-либо ошибок, но для моих целей этого будет достаточно.

Также с ограниченным тестированием, которое я провел с двумя отдельными масками, я не столкнулся с какими-либо проблемами. Маски, которые я использовал, были aa99aaa999 и (999) 999-9999.

Я просто обновил событие привязки обработчика вставки. Все, что делает эта логика, - это гарантирует, что положение курсора> = длина маски, и, если это так, запускает завершенную функцию, при условии, что вы ее передали.

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

Надеюсь, это кому-нибудь поможет.

...