IE中错误“预期功能”:

时间:2013-06-17 13:57:17

标签: javascript html internet-explorer

有一段HTML:

<input onclick="start();" type="button" value="Start!"/>

在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>
  1. 原始案例:失败(这就是我在这里的原因。)
  2. 使用span代替input:成功
  3. 使用其他功能名称:成功
  4. 使用其他类型:失败
  5. 使用onmouseover代替onclick:失败
  6. 我使用了调试器,它说startfunction start(){alert("Let's start");}。然后我使用alert(start)并说fileopen

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

2 个答案:

答案 0 :(得分:12)

start是IE中input个元素的属性。 (根据微软的说法,它表示“when a video clip file should begin playing。”我不知道这意味着什么,但这并不重要。)在你的控制台中,你可以通过运行来看到这一点:

> document.createElement("input").start
"fileopen"

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

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

答案 1 :(得分:1)

这很有意思。我自己做了很少的测试,似乎发生了这个错误,因为 start 已经是输入元素的属性。所以它会尝试调用属性,而不是函数。

我认为这是一个错误。

请尝试以下代码:

<script>
        function autocomplete(){
            alert("");
        }
        function vspace(){
            alert("");
        }
        function hspace(){
            alert("");
        }


    </script>

<input id="error" onclick="autocomplete();" type="button" value="Start!"/>
<input id="error2" onclick="vspace();" type="button" value="Start!"/>
<input id="error3" onclick="hspace();" type="button" value="Start!"/>

然后尝试在控制台中调试。另请尝试var x = document.getElementById("error");,然后调试x属性。

我在IE8,IE9和IE10中对此进行了测试。这些功能在IE9和IE10(Win 7 32bit)中无效。