Javascript 单击并将函数悬停到ul中的每个元素
我试图在ul中创建一个元素列表,每个元素都有自己的单击和悬停函数,但由于某些原因,所有列表元素都会绑定到我尝试绑定的最后一个函数。我尝试了很多解决方法,但它们似乎都能产生相同的效果。这是我的代码(用想法编写,而不是实际的变量Javascript 单击并将函数悬停到ul中的每个元素,javascript,jquery,html,Javascript,Jquery,Html,我试图在ul中创建一个元素列表,每个元素都有自己的单击和悬停函数,但由于某些原因,所有列表元素都会绑定到我尝试绑定的最后一个函数。我尝试了很多解决方法,但它们似乎都能产生相同的效果。这是我的代码(用想法编写,而不是实际的变量 for ( var i in JSON_object) { var li = document.createElement('li'); $(li).attr("id","listitem" + i.toSting() ); $(li).text(J
for ( var i in JSON_object) {
var li = document.createElement('li');
$(li).attr("id","listitem" + i.toSting() );
$(li).text(JSON_object[i]["name"]);
$(li).hover(function1, function2);
$(li).click(function3);
$("ul").append(li);
}
这将正确显示每个列表项,包括为每个列表项提供自己的文本和id。但所有列表项都会绑定到最后一个项单击并悬停函数,即使我尝试使用列表元素的id绑定该函数,即:
$("listitem" + i.toSting()).hover(function1, function2);
$("listitem" + i.toSting()).click(function3);
如果您有任何帮助,我们将不胜感激。您提供的代码没有问题 我猜您的
function1()
,function2()
和function3()
未正确写入以引用此
指针,以便它们可以识别导致事件的元素,或者那些函数正在尝试使用变量i
,但它们无法这样做,因为for
循环将已完成,并且只包含i
的最后一个值。如果您披露对于这些函数的代码,我们可以进一步建议如何更正它们
我可以建议使用jQuery链接对代码进行一些简化/优化:
for ( var i in JSON_object) {
var li = document.createElement('li');
$(li).attr("id", "listitem" + i)
.text(JSON_object[i]["name"])
.hover(function1, function2);
.click(function3);
.appendTo("ul");
}
函数实际上比函数1…等复杂得多,它们实际上将“JSON_对象[i]”的其他部分绑定到该项。例如,第一个列表项的函数1将使该项显示SON_对象[0][“描述”],函数2将返回到JSON_对象[0][“名称”]。问题可能存在于这些函数中,因此您可能需要公开这些函数的代码,以便我们更具体地帮助您。例如,“绑定JSON_对象[i]的其他部分”是什么`意思是?我担心在这些函数中的任何地方引用
I
,因为I
将不再具有正确的值,因为for
循环已结束。@jfriend00您所描述的似乎是问题所在,我将改为使用对象索引。谢谢您的帮助help@user2536917-什么是lab
它是如何设置的?另外,请参阅我对我的答案所做的编辑,关于在这些函数中使用I
变量。要输入上述变量function(){$(this).text(JSON_object[I][“description”];,function(){$(this).text(“JSON_object[I][“name”);)
Im开始考虑问题是,由于我正在更改每个循环,因此在执行函数时,它会为i保留最后一个值……我不知道如何处理this@user2536917-如果您在其他代码的上下文中显示使用i
的代码,我可以向您展示如何使用闭包绕过它。