Chrome 11+(可能还有IE)在设置值后未触发OnChange

Chrome 11+ (and possibly IE) not triggering OnChange after value set

本文关键字:设置 OnChange IE Chrome      更新时间:2023-09-26

前一段时间,我为jQuery编写了一个输入掩码扩展,它可以自动从输入elemnt中筛选出任何非十进制/整数值,今天我刚刚发现,如果keyup事件更改了输入的值,它就不再调用onchange事件:

示例:http://jsfiddle.net/At8Ht/37/

如果你在Firefox中查看它,当输入模糊/失去焦点时,它会在更改后在输入下方显示"Halp!",但在Chrome中则不会。

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

您可以使用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');
        }
    });

jsfiddle上的演示

change更改为blur

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

更新:

$("#item").blur(function() {
    $('#console').append('halp');
    $(this).trigger('change'); //trigger change
});
编辑:这个怎么样?(我发现很难理解当设置值="NOPE!"时你试图模拟什么。)
$("#item").focus(function() { this.oldValue = this.value; })
$("#item").keyup(function() {
    $(this).get(0).value = 'NOPE!';
}).blur(function() {
    if(this.value != this.oldValue){
        $('#console').append('halp');
        $(this).trigger('change'); //trigger change
    }
});

(旧版本)也许试试

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

相反?

(顺便说一句,在我的firefox版本中,当你离开文本框时,它只显示"halp!",而不是打字)

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

请参阅示例。。。即使在IE中也有效,但在chrome.ver<14

http://jsfiddle.net/nWVeX/7/

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