Javascript jQuery maskedinput触发器在粘贴时完成两次

Javascript jQuery maskedinput触发器在粘贴时完成两次,javascript,jquery,maskedinput,Javascript,Jquery,Maskedinput,我用jQuery maskedinput面对这个bug 在屏蔽输入上粘贴值会触发两次已完成事件。 这种行为可以在他们的官方网站上看到 打开链接并单击Demo。 选择产品密钥输入并键入aa-999-a999。 之后,尝试在字段中粘贴相同的值 还有一些其他问题与在粘贴时不触发事件有关,但这些问题都没有帮助我解决这个错误 有人知道为什么或者有类似的问题吗 提前感谢。所以我尝试了这样一个最简单的例子(用于maskedinput.js,不过请注意,我在下面和jquery-1.11.2.js中对其进行了编辑

我用jQuery maskedinput面对这个bug

在屏蔽输入上粘贴值会触发两次已完成事件。 这种行为可以在他们的官方网站上看到

打开链接并单击
Demo
。 选择
产品密钥
输入并键入
aa-999-a999
。 之后,尝试在字段中粘贴相同的值

还有一些其他问题与在粘贴时不触发事件有关,但这些问题都没有帮助我解决这个错误

有人知道为什么或者有类似的问题吗


提前感谢。

所以我尝试了这样一个最简单的例子(用于
maskedinput.js
,不过请注意,我在下面和
jquery-1.11.2.js
中对其进行了编辑):

在粘贴内容时,将为“相同”操作调用两个事件处理程序

这两个函数最终都调用了
tryfirepleted
,这将触发我们在自己的代码行中设置的
.completed
函数,如上所示:

$("#tin").mask("99-9999999",{completed:function(){alert("Now you typed: "+this.val());}});
如果删除
粘贴.mask
事件处理程序,该问题将消失。以下是关键部分:

.on(“input.mask paste.mask”,

…变为…
.on(“input.mask”,

…因此,
paste.mask
消失了。(当然,在发布到生产环境之前,请删除
console.log
行。)

现在,这可能完全可以自己工作了。粘贴触发了
输入
,因此使用
粘贴
可能会有点过火。但在将其用作永久修复之前,我会仔细检查。我尝试过用鼠标右键单击粘贴,这很好。不确定何时触发
粘贴
,并且
输入
t

如果存在调用了
paste
而没有调用
input
的边缘情况(或者您确实希望
tryFireCompleted
触发两次),则需要找到一种方法,用更复杂的代码抑制第二次
tryFireCompleted


如果没有
完成的
功能,我不认为触发两次不会是一个明显的问题,这也解释了为什么这可能会漏掉。很好的发现。

只是快速查看了一下,但它看起来像是
模糊事件
触发了
检查值
,而
产品
只有
掩码
调用了ode>已完成事件,打开一个
警报
。这通常是一个双重罪魁祸首。请尝试添加
completed:function(){alert(“现在键入:“+this.val());}
到另一个处理程序?嘿@ruffin,谢谢你的帮助。你说得对,blurEvent激发checkVal,这可能是个问题。你说“将完成的函数添加到另一个处理程序”是什么意思?不可能更清楚!我正在使用console.log东西进行调试,但方式不同。我会做出你建议的更改,然后再这样做现在应该足够了。我将在周末尝试寻找新的东西……非常感谢,伙计!标记为已接受!干杯!好交易。很高兴它有帮助!
}).on("blur.mask", blurEvent).on("keydown.mask", keydownEvent).on("keypress.mask", keypressEvent).on("input.mask", function() {
    console.log("mask called: " + arguments[0].type); // <<< New debugging line.
    input.prop("readonly") || setTimeout(function() {
        var pos = checkVal(!0);
        input.caret(pos);
        tryFireCompleted("mask");
    }, 0);
}), chrome && android && input.off("input.mask").on("input.mask", androidInputEvent),
mask called: paste
mask called: input
$("#tin").mask("99-9999999",{completed:function(){alert("Now you typed: "+this.val());}});