为什么这在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处理程序,这只是解释问题的简单方法。
谢谢
答案 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事件也没有错。这就是它的用途。
希望这有帮助。