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

时间:2011-06-15 21:48:23

标签: javascript jquery html

前段时间我为jQuery写了一个输入掩码扩展,它自动过滤掉输入元素中的任何非十进制/整数值,我今天才发现,如果keyup事件改变了值,它不再调用onchange事件输入:

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

如果您在Firefox中查看此内容,则会显示“Halp!”更改后输入下方,当输入模糊/失去焦点时,但在Chrome中则没有。

有没有人有任何建议?实际上我所要做的就是在用户输入大数字时自动插入逗号,例如在用户放开“2”键后输入“1552”会产生“1,552”。这在Chrome 11/12之前一直很好:(

4 个答案:

答案 0 :(得分:2)

change更改为blur

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

更新:

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

答案 1 :(得分:2)

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

Demo on jsfiddle

答案 2 :(得分:1)

编辑:那么这个怎么样? (我发现设置值='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
    }
});

(OLD VERSION)也许试试

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

代替?

(BTW在我的firefox版本中,当你离开文本框时,它只显示“halp!”,而不是打字)

答案 3 :(得分:0)

这是这个问题的一个非常简单的例子...... 这是固定在铬14 ...但最多13有一个问题......

查看示例...即使在IE中也可以,但在chrome.ver< 14

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

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