我有这个脚本
var b = {
c: {
a: document.querySelector(".a"),
init: function() {
this.a.style.backgroundColor = "red";
this.a.addEventListener("click", b.c.change);
},
change: function() {
this.a.style.width = "100px";
}
}
}
b.c.init();
.a {
width: 10px;
height: 10px;
background: black;
cursor: pointer;
}
<div class="a"></div>
为什么这样。一个"未定义"的风格??
在更改事件处理程序中,this
引用dom元素。所以把this.a.style....
改成this.style....
。
var b = {
c: {
a: document.querySelector(".a"),
init: function(){
this.a.style.backgroundColor="red";
this.a.addEventListener("click", b.c.change);
},
change: function(){
this.style.width="100px";
}
}
}
b.c.init();
.a {
width: 10px;
height: 10px;
background: black;
cursor: pointer;
}
<div class="a"></div>
首先,在变更事件中,this
指向的是DOM
元素而不是对象。所以你可以直接使用this
来更新样式。
其次,在a
中,this
将指向c
,因此可以直接执行this.change
b.c.change
。var b = {
c: {
a: document.querySelectorAll(".a"),
init: function() {
for (var i = 0; i < this.a.length; i++) {
this.a[i].style.backgroundColor = "red";
this.a[i].addEventListener("click", this.change);
}
},
change: function() {
console.log(this.innerHTML)
this.style.width = "100px";
}
}
}
b.c.init();
.a {
width: 10px;
height: 10px;
background: black;
cursor: pointer;
margin: 5px;
padding: 5px;
}
<div class="a">1</div>
<div class="a">2</div>
<div class="a">3</div>
<div class="a">4</div>
<div class="a">5</div>
试一次就可以了。
var b = {
c: {
a: document.getElementById("a"),
init: function(){
this.a.style.backgroundColor="red";
this.a.addEventListener("click", b.c.change);
},
change: function(){
this.style.width="100px";
}
}
}
b.c.init();
#a {
width: 10px;
height: 10px;
background: black;
cursor: pointer;
}
<div id="a"></div>