如何使用 Javascript 函数构造函数在每个框上添加点击警报?
How to add click alert on each box using Javascript function constructor?
Html代码:
<div class="box green">I'm green!</div>
<div class="box blue">I'm blue!</div>
<div class="box orange">I'm orange!</div>
CSS 代码在这里:
.green { background-color: green; }
.blue { background-color: dodgerblue; }
.orange { background-color: orangered; }
JavaScript 此处使用对象文字语法的代码:
// 想对 box2 和 box3 应用相同的效果
var box1 = {
color: 'Green',
number: 1,
clickMe: function () {
var green = document.querySelector('.green');
var self = this;
green.addEventListener('click', function () {
var str = 'This is box number ' + self.number + ' and it is ' + self.color;
alert(str);
});
}
}
box1.clickMe();
您可以在 clickMe
函数中传递参数并在警告框中使用:
var box1 = {
clickMe: function (color, number) {
var box = document.querySelector('.'+color);
box.addEventListener('click', function () {
var str = 'This is box number ' + number + ' and it is ' + color;
alert(str);
});
}
}
box1.clickMe('green', 1);
box1.clickMe('blue', 2);
box1.clickMe('orange', 3);
.green { background-color: green; }
.blue { background-color: dodgerblue; }
.orange { background-color: orangered; }
<div class="box green">I'm green!</div>
<div class="box blue">I'm blue!</div>
<div class="box orange">I'm orange!</div>
如果您想使用构造函数,可以使用 class
。您可以像这样使用构造函数(参见代码片段),它接受 color
和 number
.
然后您需要将 addEventListener
中的函数修改为箭头函数 (() => {}
),以便在调用时引用正确的 this
。
最后,在创建您的盒子时,您需要提供构造函数 (var myBox = new Box(COLOR, NUMBER)
) 定义的 color
和 number
:
class Box {
constructor(color, number) {
this.color = color;
this.number = number;
}
clickMe() {
var elem = document.querySelector('.' + this.color);
elem.addEventListener('click', () => {
var str = 'This is box number ' + this.number + ' and it is ' + this.color;
alert(str);
});
}
}
var box1 = new Box('green', 1);
var box2 = new Box('blue', 2);
var box3 = new Box('orange', 3);
box1.clickMe();
box2.clickMe();
box3.clickMe();
.green { background-color: green; }
.blue { background-color: dodgerblue; }
.orange { background-color: orangered; }
<div class="box green">I'm green!</div>
<div class="box blue">I'm blue!</div>
<div class="box orange">I'm orange!</div>
您可以使用 for 迭代元素(并添加一次事件侦听器)并使用 arrow functions (()=>{}
) 访问 this
,如下所示:
var box = {
color: ['Green', 'Blue', 'Orange'],
number: [1, 2, 3],
clickMe: function() {
var colors = document.getElementsByClassName('box');
for (let i = 0; i < colors.length; i++) {
colors[i].addEventListener('click', () => {
var str = 'This is box number ' + this.number[i] + ' and it is ' + this.color[i];
alert(str);
});
}
}
这里有一个完整的例子https://jsfiddle.net/25uLvstp/
这样,您可以一次定义所有的盒子监听器。
Html代码:
<div class="box green">I'm green!</div>
<div class="box blue">I'm blue!</div>
<div class="box orange">I'm orange!</div>
CSS 代码在这里:
.green { background-color: green; }
.blue { background-color: dodgerblue; }
.orange { background-color: orangered; }
JavaScript 此处使用对象文字语法的代码: // 想对 box2 和 box3 应用相同的效果
var box1 = {
color: 'Green',
number: 1,
clickMe: function () {
var green = document.querySelector('.green');
var self = this;
green.addEventListener('click', function () {
var str = 'This is box number ' + self.number + ' and it is ' + self.color;
alert(str);
});
}
}
box1.clickMe();
您可以在 clickMe
函数中传递参数并在警告框中使用:
var box1 = {
clickMe: function (color, number) {
var box = document.querySelector('.'+color);
box.addEventListener('click', function () {
var str = 'This is box number ' + number + ' and it is ' + color;
alert(str);
});
}
}
box1.clickMe('green', 1);
box1.clickMe('blue', 2);
box1.clickMe('orange', 3);
.green { background-color: green; }
.blue { background-color: dodgerblue; }
.orange { background-color: orangered; }
<div class="box green">I'm green!</div>
<div class="box blue">I'm blue!</div>
<div class="box orange">I'm orange!</div>
如果您想使用构造函数,可以使用 class
。您可以像这样使用构造函数(参见代码片段),它接受 color
和 number
.
然后您需要将 addEventListener
中的函数修改为箭头函数 (() => {}
),以便在调用时引用正确的 this
。
最后,在创建您的盒子时,您需要提供构造函数 (var myBox = new Box(COLOR, NUMBER)
) 定义的 color
和 number
:
class Box {
constructor(color, number) {
this.color = color;
this.number = number;
}
clickMe() {
var elem = document.querySelector('.' + this.color);
elem.addEventListener('click', () => {
var str = 'This is box number ' + this.number + ' and it is ' + this.color;
alert(str);
});
}
}
var box1 = new Box('green', 1);
var box2 = new Box('blue', 2);
var box3 = new Box('orange', 3);
box1.clickMe();
box2.clickMe();
box3.clickMe();
.green { background-color: green; }
.blue { background-color: dodgerblue; }
.orange { background-color: orangered; }
<div class="box green">I'm green!</div>
<div class="box blue">I'm blue!</div>
<div class="box orange">I'm orange!</div>
您可以使用 for 迭代元素(并添加一次事件侦听器)并使用 arrow functions (()=>{}
) 访问 this
,如下所示:
var box = {
color: ['Green', 'Blue', 'Orange'],
number: [1, 2, 3],
clickMe: function() {
var colors = document.getElementsByClassName('box');
for (let i = 0; i < colors.length; i++) {
colors[i].addEventListener('click', () => {
var str = 'This is box number ' + this.number[i] + ' and it is ' + this.color[i];
alert(str);
});
}
}
这里有一个完整的例子https://jsfiddle.net/25uLvstp/
这样,您可以一次定义所有的盒子监听器。