按下回车键时,IE中的事件更改不起作用。

4

我想在输入[type=text]的变化时执行一个函数,在除IE外的所有浏览器中都可以正常工作。

这是一个示例:

$('input.switch').change(function(){
    alert('ok now');    
});

文本输入框看起来像这样:
<input class="switch" type="text" value="50000" />

不要忘记我有许多具有不同类的输入框!

您有解决方案吗?


在IE中会发生什么?有任何错误吗?你试过if($(this).prop('checked'))吗? - Felix Kling
在IE中,当输入框失去焦点时,事件会被执行!! :\ - kach
这适用于所有浏览器中的文本输入...但是您的代码似乎没有涉及到文本输入。 - Felix Kling
2个回答

3

如果您希望在按下Enter键时激活事件,则注册此事件:

$('input.switch:first').keydown(function(e){
    if (e.keyCode==13) { //Enter keycode
        //Do you stuff
    }
});

可能是因为文本输入框没有失去焦点,所以按下回车键无法触发更改。

祝好运!

更新: 最新版本的jQuery可以使用$('*:focus')来获取当前焦点元素。我相信你应该添加支持IE的脚本。对于每个keydown事件,如果按键是回车键,则获取当前焦点输入框,使其失去焦点并触发更改:

$('body').keydown(function() {
    if (e.keyCode==13) { //Enter keycode
        $('input:focus').blur().change(); //The blur is to prevent change happen again
    }
});

我不确定您是否能强制IE在按下回车键时以不同的方式触发更改。

希望这次能帮到您。


是的,我知道这个,但我想使用更改事件,问题只出现在IE中 :'(. - kach
1
仅作一点评论,keydown函数也需要包含"e":$('body').keydown(function(e) { - mike

2
这是一个更为精准的IE兼容性填充方案:

var isIE = !!document.documentMode;
if (isIE) {

    $("body").on("keydown", "input[type='text']", function (e) {

        // Ensure 'change' event is fired on enter in IE
        if ((e.keyCode || e.which) === 13) {
            $(this).blur();
        }
    });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接