IE中的"预期功能"错误:'<input onclick ="start();" ......'

joh*_*902 10 html javascript internet-explorer

有一段HTML:

<input onclick="start();" type="button" value="Start!"/>
Run Code Online (Sandbox Code Playgroud)

在Firefox和Chrome中,它会start在点击时调用.但是在IE9中会产生错误消息:SCRIPT5002: Function expected.然后我尝试了几种不同的情况:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <script>
        function start(){
            alert("Let's start");
        }
        function stop(){
            alert("Let's stop");
        }
    </script>
    <input onclick="start();" type="button" value="Start!"/><br/> <!-- Failed : the main issue -->
    <span onclick="start();">Start!</span><br/> <!-- Work -->
    <input onclick="stop();" type="button" value="Stop!"/><br/> <!-- Work -->
    <input onclick="start();" type="text" value="Start!"/><br/> <!-- Failed -->
    <input onmouseover="start();" type="button" value="Start!"/><br/> <!-- Failed -->
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
  1. 原案:失败(这就是我在这里的原因.)
  2. 使用a span而不是input:Success
  3. 使用其他功能名称:成功
  4. 使用其他类型:失败
  5. 使用onmouseover而不是onclick:失败

我使用调试器,它说startfunction start(){alert("Let's start");}.然后我用了alert(start)它说fileopen.

作为测试3的结果,我可以通过更改名称轻松解决问题,但我想知道为什么在某些情况下会发生此错误但在其他情况下不会发生.编辑:或者下一个最好的事情,其他解决方法而不更改名称.

aps*_*ers 12

startinputIE 中元素的属性.(根据微软的说法,它表示" 视频剪辑文件应该开始播放."我不知道这意味着什么,但这并不重要.)在你的控制台中,你可以通过运行来看到这一点:

> document.createElement("input").start
"fileopen"
Run Code Online (Sandbox Code Playgroud)

在元素的内联事件处理程序中,该元素的所有属性都可用作顶级变量.就像内联代码在一个with(thisParticularElement)块内运行一样(thisParticularElement显然是带有监听器的元素).因此,在内联事件代码的上下文中,变量start引用start元素的属性,该元素是字符串,而不是函数.

只需更改功能名称,或window.start明确使用.