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(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 回答