注册 登录
编程论坛 JavaScript论坛

【新手】onclick之类的属性到底怎么理解

於晓琪123 发布于 2015-08-04 19:39, 1465 次点击
学习javascript(看书 看视频)这几天,发现很多讲解都是很表面 让我学习起来很痛苦 比如谈到 onclick 之类属性的时候
<input type="button" onclick="方法名+()"/>   当点击按钮的时候就会执行后面的方法。(给一个属性赋值 而且还是“函数名+()”虽然不知道为什么但是还是只能这么理解了)
今天看到另外一种方式 给onclick 赋值(在这里就这么说吧) 如下:
 正确代码 function btnClick() {
            var x = document.getElementsByTagName("input");
            for (var i = 0; i < x.length; i++) {
                if (x[i].type == "button") {
                    x[i].onclick = change;
                }
            }
        }
而我当时写的时候最后一行一直是 x[i].onclick = "change()";  
看到正确的写法   我真心不理解了 我想说 为什么 为什么 为什么是这样的 - -  是不是只有我才有这样的困惑  
苦恼纠结中  求解救
5 回复
#2
jsRank2015-08-05 09:54
(1)<input type="button" onclick="方法名+()"/>是html属性赋值写法。
(2)x[i].onclick = change;是js的写法。
一开始(1)比较常用,但(1)的写法将html代码与js函数糅合到一起了,耦合性太强。后来为了让html代码与js代码分离,(2)的写法越来越流行。
x[i].onclick = change和x[i].setAttribute("onclick","change()")的写法相同。
可以这么理解:
x[i]是一个js对象,它包含两个属性,一个是onclick,一个是setAttribute,结构如下:
    x[i] = {
        onclick:function(){},
        setAttribute:function(name,value){
                        
        }
    }
x[i].onclick的值是一个函数,它接受的值就是一个引用,也就是你例子中change,不接受字符串"change()",这一点是由js决定的。
好比java语言,我们定义a为String类型,当我们为a赋一个整数时会出错。js与java的区别是,你给onclick赋一个字符串它不会出错但绝对不会起作用,原因是js不是强类型语言,它是一种弱类型解释型的语言。
#3
於晓琪1232015-08-05 21:12
回复 楼主 於晓琪123
好的 谢谢版主
#4
於晓琪1232015-08-05 21:13
回复 2楼 jsRank
谢谢 解惑
#5
於晓琪1232015-08-05 21:13
回复 3楼 边小白
谢谢解答
1