我正在编写一个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>
答案 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)
一般应该有用。您可能遇到的两个潜在问题:
答案 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" />