Javascript 铬11&x2B;(可能是IE)在设置值后不触发OnChange

Javascript 铬11&x2B;(可能是IE)在设置值后不触发OnChange,javascript,jquery,html,Javascript,Jquery,Html,不久前,我为jQuery编写了一个输入掩码扩展,它可以自动从输入元素中过滤出任何非十进制/整数值,今天我才发现,如果keyup事件更改了输入的值,则不再调用onchange事件: 例如: 如果您在Firefox中查看,当输入模糊/失去焦点时,更改后的输入下会显示“Halp!”,但在Chrome中则不会 有人有什么建议吗?实际上,我所要做的就是在用户键入大量数字时自动插入逗号,例如,在用户放开“2”键后键入“1552”将产生“1552”。这在Chrome 11/12之前一直运行良好:(将更改为模糊

不久前,我为jQuery编写了一个输入掩码扩展,它可以自动从输入元素中过滤出任何非十进制/整数值,今天我才发现,如果keyup事件更改了输入的值,则不再调用onchange事件:

例如:

如果您在Firefox中查看,当输入模糊/失去焦点时,更改后的输入下会显示“Halp!”,但在Chrome中则不会


有人有什么建议吗?实际上,我所要做的就是在用户键入大量数字时自动插入逗号,例如,在用户放开“2”键后键入“1552”将产生“1552”。这在Chrome 11/12之前一直运行良好:(

更改为
模糊

$("#item").blur(function() {
    $('#console').append('halp');
});

更新:

$("#item").blur(function() {
    $('#console').append('halp');
    $(this).trigger('change'); //trigger change
});

编辑:那么这个呢?(我发现当设置value='NOPE!'时,很难理解您试图模拟什么)

(旧版本)或许可以试试

.bind('keyup', function() {
    $('#console').append('halp');
});
相反


(顺便说一句,在我的firefox版本中,当您离开文本框时,它只显示“halp!”,而不是键入)

您可以使用
blur
和更详细的内容来执行此操作:

$("#item")
    .focus(function() {
        this.previousValue = this.value;
    })
    .keyup(function() {
        this.value = new Date().getTime(); // or whatever magic code goes here
    })
    .blur(function() {
        if (this.previousValue !== this.value) {
            this.previousValue = this.value;
            $('#console').append('halp');
        }
    });

这是一个非常简单的例子。。。 这是固定的铬14…但到13有一个问题

请参见示例…即使在IE中也能工作,但在chrome.ver<14中则不行


最简单的解决方案是使用模糊而不是更改…

即使没有更改,它也会调用模糊。这是个好主意,但我需要使用“onchange”,因为这就是“TextChanged”的含义ASP.NET中的事件在标记中生成。是的,这可能会起作用,但并不理想。正如Niklas指出的,无论是否有更改,这都会触发onchange事件。考虑到此插件在整个应用程序中都使用(而且它是一个相当大的插件),这可能会对性能有害,并且会导致混乱,例如,如果由于您在字段上使用了选项卡而未填写字段,因此验证被启动。这是它应该工作的方式,一旦您离开文本框(在模糊状态下),它应该显示“halp!”,通常会在此时触发onchange。不幸的是,'keyup()'函数只是一个调用bind('keyup',func)的助手所以这没有什么区别。:\n是的。你不能在keyup事件中进行“筛选”和插入逗号吗?你能分享你的筛选吗?这就是我要做的,keyup事件执行所有的逗号插入,更改事件应该在你离开字段后触发,但如果keyup事件处理程序真的修改了,则不是这样这是一个领域的任何东西。我不能真正分享代码,因为从技术上讲,代码属于另一家公司(我们的一位客户)是的,我想我会遵循这些思路——这是我希望避免的事情,但哦,好吧:)我写的这个jquery插件的一个妙处是,它实际上绑定了表单而不是输入元素,这大大加快了绑定速度,我可能会被迫直接在每个元素上绑定焦点/模糊(或者如果我使用keyup而不是focus,则只绑定模糊),这可能会带来性能成本。谢谢大家的智慧:)
$("#item")
    .focus(function() {
        this.previousValue = this.value;
    })
    .keyup(function() {
        this.value = new Date().getTime(); // or whatever magic code goes here
    })
    .blur(function() {
        if (this.previousValue !== this.value) {
            this.previousValue = this.value;
            $('#console').append('halp');
        }
    });