jQuery Maskedinput插件:粘贴不起作用后完成的事件

时间:2011-06-09 16:13:51

标签: events jquery-plugins maskedinput pasting

我在使用jQuery时遇到问题Masked Input Plugin 文字输入成功有效,但如果我粘贴文字进入屏蔽文本框 - 我无法捕捉已完成事件。

来自插件网站的示例:

<script type="text/javascript">

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

有人做过类似的事吗?

2 个答案:

答案 0 :(得分:3)

我结束了:

  1. 绑定到粘贴事件和
  2. 然后在短暂的 setTimeout 之后获取粘贴的 val() -ue (因为粘贴的数据在触发事件时不会进入控件)和
  3. 最后调用与完整
  4. 相同的方法
    // 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);
    });
    

    可能有一个更简单的解决方案,但这似乎最简单,因为事实证明在所有浏览器中获取剪贴板数据并不容易。

答案 1 :(得分:0)

以下是我在粘贴时触发Completed事件所做的工作。它可能不是美妙的解决方案,或任何方式都是万无一失的,但就我的目的来说,它就足够了。

另外,由于我使用2个单独的面具进行了有限的测试,我没有遇到任何问题。我使用的面具是aa99aaa999(999) 999-9999

我只是更新了粘贴处理程序的绑定事件。所有这些逻辑都确保光标的位置是> =掩码的长度,如果是这种情况,它将触发完成的函数,假设你已经通过它。

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

希望这可以帮助别人。