2010-04-05 89 views
0

我正在寫一個WWW應用程序,它必須在IE下運行。我在FF下運行的代碼存在問題,但我無法在IE下運行它。輸入類型文本和onKeyDown不工作在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中它正確工作。

UPDATE 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

怎麼樣'window.location.href = 「myPage.php」;' – 2010-04-05 10:27:31

+0

'window.location.href'沒有'assign'方法('window.location')。但是,我不認爲這是你的問題,因爲在Firefox中同樣如此(並且會引發錯誤)。你的代碼中還有一些其他的拼寫錯誤(我修正了,但你把它們編輯回來:-)) – 2010-04-05 10:33:51

+0

哦,不知道,請再次編輯它們,如果可以的話,欣賞你的輸入 – qlf00n 2010-04-05 10:35:43

回答

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'; 
}; 

一般我只嘗試捕獲輸入按鍵複製/更改默認的表單提交行爲作爲最後的手段;如果你能讓表單提交到你想要的地方,那就更好了。

+0

好的。試過你的解決方案,它似乎工作。雖然有一個微妙的問題。它只適用於'alert('sth');'如果block在第二個之後:頁面顯示警告並重定向。如果我刪除了這條警戒線,頁面會重新加載到自己.. – qlf00n 2010-04-05 11:26:55

+0

如果您處於實際的'

'元素中,那麼您需要向事件處理程序添加「return false」,否則表單將繼續按常規提交輸入按鈕,最後到達表單的'action'屬性(默認爲當前URL,如果省略,儘管忽略它是無效的)。如果你有一個表單,並且想要通過回車(或者其他方式)來提交它,那麼使用'onsubmit'事件要好得多,而不用擔心重新創建瀏覽器特定的密鑰處理行爲。 – bobince 2010-04-05 11:45:06

+0

當然,最好還是讓表單在沒有任何JavaScript黑客入侵的情況下工作。如果出於某種原因不可能,那麼最好省略'',並且只包含空的''元素,這樣就不會有不需要的提交。 – bobince 2010-04-05 11:46:45

0

試試這個。它早已爲我工作。

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

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

這是行不通的。 'onKeyPress'現在是一個函數,它引用'KeyCheck'函數,然後不做任何事情。 'KeyCheck'永遠不會被調用。 – bobince 2010-04-05 10:56:13

0

它應該一般工作。您可能遇到兩個潛在問題:

  1. IE在使用location.href中的相對鏈接時會發生奇怪的事情。你有沒有試過把http://stackoverflow.com放在那裏?
  2. IE中的安全設置可能會阻止正確的事情發生,即使您在本地文件而不是Web服務器上進行測試。
0

jQuery的修復

document.onkeydown = function (e) { 
    var event = jQuery.event.fix(e || window.event); 
    var keycode = event.which; 
    var isControl = event.ctrlKey; 
} 
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" />

相關問題