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

这适用于 jquery 1.3.2,但是当升级到 1.8.2 时,当用户离开该字段且没有错误时,它会停止取消屏蔽。需要调整什么才能再次开始取消屏蔽?

4

1 回答 1

0

问题是您删除unmask了另一个模糊处理程序中的插件附加的模糊处理程序(通过调用)。为了避免不可预知的行为,jQuery 在运行任何处理程序之前在本地保存对所有处理程序的引用。

  1. 发生模糊。输入有 2 个模糊处理程序(你的和来自插件的);
  2. jQuery 复制一组处理程序。
  3. 您的处理程序似乎首先运行。它调用 unmask 删除第二个处理程序。但是调度循环内部仍然有一个引用。
  4. jQuery 运行第二个处理程序来恢复掩码。

我不知道为什么这段代码适用于 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 回答