ie8中元素id的奇怪行为

时间:2011-05-26 21:59:30

标签: javascript

为什么这在ie8中起作用?

function testFunction(ctrl)
{
                alert(ctrl.value);
}

我的页面上有一个javascript函数。然后我有一个id为“text1”的输入标签和一个带有以下onclick事件的按钮

<input id="text1" value="value" />

<input type="submit" onclick="testFunction(text1)" value="Click" />

javascript函数确实提醒文本框的值,但我只是传入文本框的id,不带引号。我没有必要调用getelementbyid,它只是工作。什么是在这里做,它在Firefox中不起作用。 id如何变成实际的文本框对象,我可以在其上调用cntrl.value?

P.S。 - 我知道我不应该以这种方式使用onclick处理程序,这只是解释问题的简单方法。

谢谢

3 个答案:

答案 0 :(得分:8)

这是你的页面可能在quirks模式和IE做令人讨厌的DOM Level 0的东西的副作用。

实际的解释是,在DOM级别0上,ID会自动添加到window全局对象,因此会在指向DOM元素的全局范围内创建自动变量。

长话短说:不要那样编码,永远。你依赖的是一种“事实上”的标准,浏览器通常会试图模仿对方的行为,这就是IE表现得非常糟糕且其他浏览器不遵循的情况。在适当的地方使用实际的DOM方法,例如getElementById

答案 1 :(得分:0)

ctrl.value语法用于将name属性设置为“ctrl”的HTML元素。它用于id并不标准。您必须使用getElementById进行跨浏览器支持。

答案 2 :(得分:0)

继续从gonchuki回答。这就是你应该这样做的方式。

function testFunction(ctrl)
{
    var obj = document.getElementById(ctrl);
    alert(obj.value);
}

<input type="submit" onclick="testFunction('text1')" value="Click" />

使用按钮的onclick事件也没有错。这就是它的用途。

希望这有帮助。