问题是,当我在页面底部创建页码按钮时,onclick只能与最后创建的元素一起使用。
这是页面按钮的外观:
for(var i = 0; i < numberOfPages; i++) {
if(Math.floor((((startIndex + 1) / 10) + 1)) == (i + 1)) {
var newElement = document.createElement("u");
document.getElementById("imagesNav").appendChild(newElement);
newElement.id = "imagesNavU";
var newElement = document.createElement("a");
document.getElementById("imagesNavU").appendChild(newElement);
var str = "page" + (i + 1);
newElement.innerHTML = i + 1;
newElement.onclick=function(){currentPageNumber(str);};
} else {
var newElement = document.createElement("a");
document.getElementById("imagesNav").appendChild(newElement);
var str = "page" + (i + 1);
newElement.innerHTML = i + 1;
newElement.onclick=function(){currentPageNumber(str);};
}
if(i + 1 != numberOfPages) {
document.getElementById("imagesNav").innerHTML += " ";
}
}
}
如果该元素是当前页面,则第一个if语句仅将下划线标记放在上面。
编辑:问题已解决。谢谢大家的帮助!
问题出在循环的这一部分:
if(i + 1 != numberOfPages) {
document.getElementById("imagesNav").innerHTML += " ";
}
这将重新解析imagesNav
元素中的所有HTML 。这将创建新<a>
元素,这些元素不具有onclick
以前的元素所具有的绑定。
相反,您可以附加一个<span>
包含空格的元素。
var numberOfPages = 3;
var startIndex = 0;
for (var i = 0; i < numberOfPages; i++) {
if (Math.floor((((startIndex + 1) / 10) + 1)) == (i + 1)) {
var newElement = document.createElement("u");
document.getElementById("imagesNav").appendChild(newElement);
newElement.id = "imagesNavU";
var newElement = document.createElement("a");
document.getElementById("imagesNavU").appendChild(newElement);
var str = "page" + (i + 1);
newElement.innerHTML = i + 1;
newElement.onclick = function() {
currentPageNumber(str);
};
} else {
var newElement = document.createElement("a");
document.getElementById("imagesNav").appendChild(newElement);
var str = "page" + (i + 1);
newElement.innerHTML = i + 1;
newElement.onclick = function() {
currentPageNumber(str);
};
}
if (i + 1 != numberOfPages) {
var span = document.createElement('span');
span.innerHTML = ' ';
document.getElementById("imagesNav").appendChild(span);
}
}
function currentPageNumber(str) {
alert(str);
}
<div id="imagesNav">
</div>
另一种方法是使用insertAdjacentHTML
,它将HTML添加到元素中,而无需重新解析其中已经存在的内容。
document.getElementById("imagesNav").insertAdjacentHTML('beforeend', ' ');
您还应该在循环内看到JavaScript闭合–简单的实际示例,因为使用str
变量的方式,所有单击处理程序都将使用循环的上一次迭代中的值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句