我在一段JavaScript代码中有一系列列表项。我想为每个分配一个onclick事件处理程序。每个处理程序将具有相同的功能,但具有不同的输入参数。现在我有:function contentfill(i) { box = document.getElementById("text"); box.style.background="rgba(0,0,0,0.8)"; var content = new Array(); contentdivs = document.querySelectorAll("#contentfill>div"); box.innerHTML = contentdivs[i].innerHTML;}li[3].onclick = function() {contentfill(0);};li[4].onclick = function() {contentfill(1);};li[5].onclick = function() {contentfill(2);};这已经足够好了,但是我想通过循环来实现相同的目的,例如:for(i=3;i<=5;i++) { j=i-3; li[i].onclick = function() {contentfill(j);};}但是,这不起作用。由于j似乎在循环结束时定义为2,因此每次单击时,它似乎仅调用contentfill(2)。 最佳答案 对于另一种方法,请考虑让每个元素都知道应使用的参数。for (var i = 0; i < 3; i++) { var el = li[i + 3]; el.dataset.contentIndex = i; el.addEventListener('click', contentfill);}当然,contentfill必须从.dataset中提取参数,而不是采用参数。 (这与jQuery的$.data相同。)我倾向于使用它,因为(a)它不会生成大量的小包装,(b)它允许我以后检查并可能更改“参数”,并且(c)它允许我在文档中使用属性。有效地将它们从函数参数更改为行为。
10-04 10:37