日期:2014-05-16  浏览次数:20312 次

问一个很弱的问题,关于兼容
<html>
<head>
<script type="text/javascript">
function testThis() {
alert(this.button.ele);
return false;
}
</script>
</head>
<body>
<div align="center">
<input type="button" value="点击这里给出提示" name="button" onclick="testThis()" ele="just test"/>
</div>
</body>
</html>
这串代码,在IE10和IE8弹出的内容不同,在谷歌火狐弹不出对话框,请问这是兼容问题吗?
Google IE10 火狐 兼容

------解决方案--------------------
首先是this,由于testThis不是类的方法,所以this指向window。
其次,直接使用name来指定element是IE独有的方式,并不是规范中的内容,所以谷歌火狐都不支持,要兼容,请使用规范的 document.getElementsByName("domId")[0];因为name可以有多个,所以getElementsByName返回的是一个类数组的对象。

三,要得到element的属性,请使用规范的getAttribute();


function testThis() {
var bb = document.getElementsByName("button")[0];
alert(bb.getAttribute("ele"));
return false;


------解决方案--------------------
<html>
<head>
<script type="text/javascript">
function testThis() {
alert(this.button.ele);
return false;
}
</script>
</head>
<body>
<div align="center">
<input type="button" id="test" value="点击这里给出提示" name="button" onclick="testThis()" ele="just test"/>
</div>
</body>
</html>


这里window.elementName的方式是IE专有的。解决方法如上面这位大哥的。但是最好给button加上一个id。
这样在你变更页面的时候不容易出现bug。


function testThis() {
var bb = document.getElementsById("test");
alert(bb.getAttribute("ele"));
return false; //而且我觉得这句没有必要,button没有什么默认行为,看你也不是为了阻止冒泡。
//return false一般用来同时组织冒泡行为和默认行为的。