<html>
<head>
<script type="text/javascript">
function upperCase(x)
{
var y=document.getElementById(x).value
document.getElementById(x).value=y.toUpperCase()
//此处的 document.getElementById(x).value为什么不能用y代替
}
</script>
</head>
<body>
Enter your name: <input type="text" id="fname" onchange="upperCase(this.id)">
</body>
</html>
原因:因为y=document.getElementById(x).value中的=表示的是赋值;
解释:
1、把document.getElementById(x).value的值赋给y但并不是说变量y就能代表document.getElementById(x).value;
2、按照之前的课程里讲的变量只是容器,你放进容器里的东西并不能代表容器本身(水不能代表杯子);
3、document.getElementById(x).value=y.toUpperCase()的意思是说把y转换成大写字母,再把这个转换后的值赋给document.getElementById(x).value,这时候document.getElementById(x).value原来的值就被重写覆盖了,变成转换后的值了;
4、如果把document.getElementById(x).value=y.toUpperCase()换成y=y.toUpperCase(),那就是重写覆盖掉y的值,但是document.getElementById(x).value的值还是没有变;
5、所以如果你将这里的document.getElementById(x).value换成y的话,那你还得再赋值一次把y的值再赋给document.getElementById(x).value来重写覆盖掉它原来的值。
那里不能用y代替的。
我先给个行号:
var y=document.getElementById(x).value;
document.getElementById(x).value=y.toUpperCase();
alert(y); //这是我加的
因为第一行的意义是“把等号右边的值赋予给左边的y变量”,而不是“让左边和右边相等”。所以要是你第二行如果把等号左边改成y,那只能让y的值变大写(可以通过第三行验证),但document.getElementById(x).value 本身完全没有被改变。