2015-05-29 60 views
3

我很努力地在Chrome瀏覽器版本43.0.2357.81 m以下的代碼中運行,以及OS Windows XP。瀏覽器兼容性---普通的Javascript代碼

下面的代碼是完美的Firefox和IE。 是Chrome瀏覽器與Windows XP兼容與否。

在鉻我得到TrpeError:翻譯不是功能;

在此先感謝。

<!DOCTYPE html> 
<html> 
    <head> 
     <script type="text/javascript"> 
      function translate(event){ 
       if(event.keyCode == 13 || event.which==13){     
        alert("You have entered ENTER key");      
       } 
      } 

     </script> 
    </head> 
    <body> 
     <table> 
      <tr> 
       <td>User Name: </td> 
       <td><input type="text" name="username" id="username"></td> 

      </tr>   
      <tr> 
       <td>Password :</td> 
       <td> 
        <input type="password" name="password" id="password" onkeydown="javascript: translate(event)"> 
       </td> 

      </tr> 
      <tr> 
       <td></td> 
       <td><input type="submit" name="Login" value="Login"></td> 

      </tr> 

     </table> 
    </body> 
</html> 
+2

更改函數名稱,它的工作原理。 – Lain

+0

什麼是TrpeError? –

+0

未捕獲TypeError –

回答

3

編輯:正如Aar Digulla指出的那樣,這與Chrome的內容安全策略無關,正如我第一次想到的那樣。然而,我會留下這個答案,因爲下面的代碼仍然是處理事件的有效方法。

var passfield = document.getElementById('password'); 
passfield.onkeydown = function(event) { 
    if(event.keyCode == 13 || event.which==13){     
      alert("You have entered ENTER key");      
    } 
} 

下小提琴顯示這個動作:
https://jsfiddle.net/x0enzmc7/

+1

答案的第一部分僅適用於服務器向瀏覽器發送特殊報頭以啓用CSP的情況。具體來說,如果Chrome默認啓用CSP,jsfiddle將不起作用。 –

+0

謝謝Aaron,我已經更新了我的答案以反映這一點。 – Vaune

2

略去javascript:。這應該工作:

... onkeydown="translate(event)" ... 

但它可能不太脆的功能附加到頁面的onload事件:

function onload() { 
    var password = document.getElementById('password'); 
    password.onkeydown = translate; 
} 

注意event可能的translate()內是不確定的。使用

event = event || window.event; 

來解決這個問題。

最後,函數應返回truefalse,具體取決於是否要吞下該事件。

正如你所看到的,這很難找到正確的答案。只需將jQuery添加到您的頁面並使用它即可修復所有這些討厭的問題。

+0

thanx亞倫,我是新來的JavaScript,這裏我的問題是在JavaScript函數何時使用真假返回 –

+0

閱讀http://www.quirksmode.org/js/introevents.html和http://stackoverflow.com /問題/ 4379403/jQuery的事件處理程序返回值 –