输入类型文本和onKeyDown不能在IE下工作

时间:2010-04-05 10:26:15

标签: javascript html javascript-events dhtml

我正在编写一个WWW应用程序,它必须在IE下运行。我有在FF下运行的代码的问题,但我不能让它在IE下运行。

// JS代码

function test()
{
    if (window.event.keyCode == 13)
        window.location.assign("myPage.php");
}

我在window.location和location.href以及document.location周围尝试了一些类似的方法。我已经读过IE有问题,所以我要求解决方案。

目标是,在将某些文本输入<input type='text' name='item_code' onKeyDown='test()'>后重新加载该页面并单击回车。因此结果类似于在文本输入下面按下提交类型按钮。

在IE中,它重新加载相同的页面,没有任何反应。在FF中它正常工作。

更新1:

试过bobince给出的解决方案。

<input type='text' name='item_code'>

<script type='text/javascript' >

document.getElementsByName('item_code')[0].onkeydown = function(event)
{
    if (event == undefined) { event = window.event; }
    if (event.keyCode == 13) { window.location = 'myPage.php'; }

    alert('1');
}

</script>";

问题是,如果有alert('1');行,页面显示警告和重定向,如果没有alert('1');行,页面只会重新加载到自身。我不知道这里有什么问题?

更新2:

我正在粘贴最终适合我的东西。

<form action='mainPage.php' method='POST'>
    <input type='text' name='item_code'>
</form>

<script type='text/javascript' >
    document.getElementsByName('item_code')[0].onkeydown= function(event)
    {
        if (event == undefined)
        {    
            event = window.event;
        }

        if (event.keyCode == 13)
        {
            var js_item_code = document.getElementsByName('item_code')[0].value;
            window.location = 'myPage.php?item_code='+js_item_code;
            return false;
        }
    };
</script>

5 个答案:

答案 0 :(得分:5)

这很奇怪,因为您使用window.event应确保您的功能在IE中有效。当我尝试你的代码时,这肯定会发生在我身上。我怀疑还有更多你没有向我们展示。

使用内联事件处理程序属性以跨浏览器方式处理事件的常用方法是:

<input type="text" name="item_code" onkeydown="test(event)">

function test(event) {
    if (event.keyCode===13)
        window.location.href= 'myPage.php';
}

这是有效的,因为属性中的event引用了IE中的全局window.event,其中每隔一个浏览器引用一个名为event的本地参数传递给事件处理程序属性功能

但是,通常认为避免事件处理程序属性并从JavaScript本身分配处理程序会更好。在这种情况下,您需要检查以查看要使用的内容:

<input type="text" name="item_code">

// in a script block after the input, or in document-ready code
//
document.getElementsByName('item_code')[0].onkeydown= function(event) {
    if (event===undefined) event= window.event; // fix IE
    if (event.keyCode===13)
        window.location.href= 'myPage.php';
};

一般情况下,我只会尝试捕获Enter按键以重现/更改默认表单提交行为作为最后的手段;如果你能让表格提交到你想去的地方,那就更好了。

答案 1 :(得分:0)

试试这个。它早些时候对我有用。

 <input type="text" onKeyPress="KeyCheck"/>

 function KeyCheck(e) {
    var KeyID = (window.event) ? event.keyCode : e.keyCode;
    if (KeyID == 13 ) {
       alert('key pressed!!);
    }
  }

答案 2 :(得分:0)

一般应该有用。您可能遇到的两个潜在问题:

  1. 当使用location.href中的相对链接时,IE会做一些奇怪的事情。您是否尝试过将http://stackoverflow.com放在那里?
  2. 如果你在本地文件而不是网络服务器上进行测试,IE中的安全设置可能会阻止正确的事情发生。

答案 3 :(得分:0)

jQuery修复

document.onkeydown = function (e) {
    var event = jQuery.event.fix(e || window.event);
    var keycode = event.which;
    var isControl = event.ctrlKey;
}

答案 4 :(得分:0)

有一种方法可以在不使用html代码上的<form>标记的情况下使其正常工作。

这是我发现的最简单的解决方案,至少适用于IE,Chrome和Firefox:

$(function() {
  $("input#q").on('keydown', function(event) {
    if (event.which == 13) {
      document.location.assign("page.aspx?q=" + $("#q").val());
      return false;
    }
  });
});
<input name="q" type="text" />