浏览器兼容性 —— 纯 JavaScript 代码

3

我在Chrome浏览器版本43.0.2357.81 m和Windows XP操作系统中无法运行以下代码。

以下代码在Firefox和IE上完美运行。 Chrome浏览器是否与Windows XP兼容。

在Chrome中,我遇到了TrpeError:translate不是函数的错误;

提前致谢。

<!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
什么是 TrpeError - Aaron Digulla
2个回答

3

编辑:正如Aaron 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将无法正常工作。 - Aaron Digulla
谢谢Aaron,我已经更新了我的答案以反映这一点。 - Vaune

2
省略javascript:。 这样应该可以正常工作:
... onkeydown="translate(event)" ...

但是将一个函数附加到页面的 onload 事件上可能会更加灵活可靠:
function onload() {
    var password = document.getElementById('password');
    password.onkeydown = translate;
}

请注意,在translate()内部,event可能是未定义的。请使用:
event = event || window.event;

最后,该函数应返回truefalse,具体取决于它是否想要消耗事件。

可以看到,这很难正确处理。只需将jQuery添加到页面中并使用它-它可以解决所有这些麻烦问题。

为了解决这个问题,请进行以下操作。


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Manjunath R J
阅读http://www.quirksmode.org/js/introevents.html和https://dev59.com/QG855IYBdhLWcg3wYTL_。 - Aaron Digulla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接