jquery插件版本升级

时间:2012-12-06 20:46:32

标签: jquery jquery-ui

我们使用jquery input mask from here和一个代码片段,在必要时设置和取消设置掩码:

$('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时,当用户离开字段时没有错误就停止了取消屏蔽。什么需要调整,以便再次开始取消屏蔽?

1 个答案:

答案 0 :(得分:0)

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

  1. 模糊发生。输入有2个模糊处理程序(你的和插件中的一个);
  2. jQuery复制一组处理程序。
  3. 您的处理程序似乎首先运行。它调用unmask删除第二个处理程序。但调度循环内部仍有一个参考。
  4. jQuery运行第二个恢复掩码的处理程序。
  5. 我不知道为什么这段代码适用于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/

相关问题