Javascript: Object doesn't support this action error with onclick="status()"

Javascript: Object doesn't support this action error with onclick="status()"

我在 IE11 中尝试调用在单击单选按钮时执行的函数时出现错误。

这是单选按钮的 html:

<input type="radio" name="filter" value="status" onclick="status()" checked>    

函数定义在页面底部:

function status(){

    try{
        var td = document.getElementById("check1td");
        td.innerHTML = "Current (CURR)<input type=\"checkbox\" name=\"skustat1\" value=\"CURR\" checked>";

        td = document.getElementById("check2td");
        td.innerHTML = "Test (TEST)<input type=\"checkbox\" name=\"skustat2\" value=\"TEST\" checked>";

        td = document.getElementById("check3td");
        td.innerHTML = "Stocking Internet (SINET)<input type=\"checkbox\" name=\"skustat3\" value=\"SINET\" checked>";

        td = document.getElementById("check4td");
        td.innerHTML = "Sellable Display (SLDSP)<input type=\"checkbox\" name=\"skustat4\" value=\"SLDSP\" checked>";

    }
    catch(err){
        alert(err.message);     
    }
}

我在同级单选按钮上有一个类似定义的函数,它被正确调用。所以,我的问题是,status() 是 IE 不会响应的保留 javascript 函数吗?而且,如果是这样,为什么这在其他浏览器中有效?

编辑:将 Status() 更改为 status() 以反映它在我的代码中的实际显示方式。

UPDATE1:似乎它在首次在 IE 中打开浏览器时也能正常工作,可能是缓存问题?

您不能将 status 用作 chrome 中的变量(可能其他浏览器也是如此)。

var internal = [];
for(var b in window) { 
  if(window.hasOwnProperty(b)) internal.push(b); 
}
console.log(internal); 

[... "status", ...]

尝试将其重命名为 Status() 或其他名称。此代码有效:http://jsfiddle.net/hLmbk6bz/1

像这样添加事件侦听器:

document.getElementById("clickMe").addEventListener("click", status);

参见fiddle:http://jsfiddle.net/bun4g2d0/4/

HTML

<input id="clickMe" type="radio" name="filter" value="status" onclick="status()" checked> 
    <div id="check1td"></div>
    <div id="check2td"></div>
    <div id="check3td"></div>
    <div id="check4td"></div>

javascript

document.getElementById("clickMe").addEventListener("click", status);
        function status(){
    try{
        var td = document.getElementById("check1td");
        td.innerHTML = "Current (CURR)<input type=\"checkbox\" name=\"skustat1\" value=\"CURR\" checked>";

        td = document.getElementById("check2td");
        td.innerHTML = "Test (TEST)<input type=\"checkbox\" name=\"skustat2\" value=\"TEST\" checked>";

        td = document.getElementById("check3td");
        td.innerHTML = "Stocking Internet (SINET)<input type=\"checkbox\" name=\"skustat3\" value=\"SINET\" checked>";

        td = document.getElementById("check4td");
        td.innerHTML = "Sellable Display (SLDSP)<input type=\"checkbox\" name=\"skustat4\" value=\"SLDSP\" checked>";

    }
    catch(err){
        alert(err.message);     
    }
}

绝对是 "status" 的名字。这是两者之间的唯一区别:

http://jsfiddle.net/CrossEye/ux636prr

还有这个:

http://jsfiddle.net/CrossEye/ux636prr/1/

但是第二个,将 "status" 更改为 "Status" 工作正常。

和强制性代码 link,尽管 Fiddle 使用与问题相同的代码 :smile: :

<input type="radio" name="filter" value="status" onclick="status()" checked>    

我的回答并不直接适用于这种情况,但我遇到了由一个非常相似和相关的问题引起的完全相同的错误。我的函数名称不是保留字,而是与输入收音机的 "name" 属性完全相同的名称。

<script>
function LoginType()
{
  // Code here never called because the function name is the same as my input name...
}
</script>
<input type="radio" name"LoginType" value="Windows" onclick="LoginType();" />

所以我不得不像这样更改我的名字:

<input type="radio" name"radio_LoginType" value="Windows" onclick="LoginType();" />