for
(
i
=
1
;
i
<
11
;
i
++
)
{
a
=
document
.
createElement
(
'a'
)
;
a
.
innerHTML
=
i
+
'<br>'
;
a
.
addEventListener
(
'click'
,
function
(
e
)
{
e
.
preventDefault
(
)
;
alert
(
i
)
}
)
;
document
.
body
.
appendChild
(
a
)
;
方法一:改变i的作用域为块级作用域
let a;
for (let i = 1; i < 11; i++) {
a = document.createElement('a');
a.innerHTML = i + '<br>';
a.addEventListener('click', function(e) {
e.preventDefault();
alert(i)
});
document.body.appendChild(a);
方法二:利用闭包,立即执行函数
var a;
for (var i = 1; i < 11; i++) {
(function(i) {
a = document.createElement('a');
a.innerHTML = i + '<br>';
a.addEventListener('click', function(e) {
e.preventDefault();
alert(i)
});
document.body.appendChild(a);
})(i);
如若是点击ul列表下的li弹出对应序号,还可以使用事件委托方法。
创建10个a标签,点击弹出相应1-10的序号错误做法:弹出均为11,当触发事件时,for循环已经结束,i为11let i, a;for (i = 1; i < 11; i++) { a = document.createElement('a'); a.innerHTML = i + '<br>'; a.addEventListener('click', function(e) { // 阻止默认行为 e.preventDefau
for (let i = 1; i <= 10; i++) {
let a = document.createElement('a')
a.innerHTML = i + '<br>'
document.body.appendChild(a)
a.addEventListener('click', functio...
for (var i = 0; i < 10; i++) {
var aObj = document.createElement('a')
aObj.innerText = 'a标签' + i
aObj.onclick = (function (i) {
return function () {
alert(i)
})(i)
document.body.appendChild(aObj)
利用块级作用域的方式
for (
a = document.createElement('a')
a.innerHTML = i + '<br>'
a.addEventListener('click',function(e){
e.preventDefault()
alert(i)
document.body.appendChild(a)
//此时点击所有的<a>弹出的数字都为10
let a
var a = document.createElement('a')
a.innerHTML = i + '<br>'
a.addEventListener('click', function (e) {
const a = document.createElement('a');
a.innerHTML = i+'<br>';
a.addEventListener('click',function(e) {
e.preventDefault();
alert(i);
document.body.appendChild(a)