2012-11-12 54 views
3
document.onkeydown = function(event) { 
    var tagName = event.target.tagName; 
    if (tagName != 'INPUT' && tagName != 'TEXTAREA' && !event.alt && event.control) { 

     if (event.ctrlKey && event.keyCode == 37) { 
      if (_this.currentPage > 1) { 
       window.location.href = _this.baseUrl.replace(/%page%/i, _this.currentPage + 1); 
      } 
     } else if (event.ctrlKey && event.keyCode == 39) { 
      if (_this.currentPage < _this.pagesTotal) { 
       window.location.href = _this.baseUrl.replace(/%page%/i, _this.currentPage - 1); 
      } 
     } 
    } 
} 

這讓我只能在IE 8中的錯誤:的Javascript IE錯誤:「目標」爲空或不是對象

「目標」爲空或不是對象

爲line var tagName = event.target.tagName;

如何解決這個問題。當我按下Ctrl或箭頭按鈕時發生錯誤。

+0

'event.target'不存在IE8。歡迎來到IE的舊事件系統。 –

+0

請你舉例說明如何解決這個問題? – user1815131

+0

使用第三方事件API來爲您處理跨瀏覽器不兼容問題。這將是我的建議。 –

回答

3

做這樣的:

event = event || window.event; 
var tagName = (event.target || event.srcElement).tagName.toUpperCase(); 
+0

同樣的,它會在下一行出現同樣的錯誤'var tagName = event.target.tagName.toUpperCase();'。 – user1815131

+1

@ user1815131:你沒有在我的答案中使用代碼。 –

+0

我用過你的。我看到你更新了。這是工作!謝謝! – user1815131

5

IE不會將event對象傳入事件處理程序。而是使用window對象的全局event屬性。所以對於IE瀏覽器,你應該使用window.event

通常的做法是首先測試提供的參數。您還必須考慮IE使用srcElement而不是target的事實。爲了解決所有這些問題,請使用類似於以下的內容:

document.onkeydown = function(event) { 
    event = event || window.event; 
    var tagName = (event.target || event.srcElement).tagName; 
    // Keep up the good work... 
} 

這應該是個訣竅。

+0

一秒鐘之後,它看起來像一個直接複製/粘貼。爲什麼要移除'toUpperCase'? –

+0

你知道我曾嘗試過。它沒有幫助我。然後在下一行'var tagName = event.target.tagName;'給出相同的錯誤。 – user1815131

+0

@ user1689607 - 我只是不認爲人們應該仍然使用怪癖模式。我絕對希望OP使用正確的'doctype'。 AFAIK,在標準模式下,IE會以大寫形式返回元素的名稱。有人糾正我,如果我錯了。 –

相關問題