Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击并将函数悬停到ul中的每个元素_Javascript_Jquery_Html - Fatal编程技术网

Javascript 单击并将函数悬停到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

我试图在ul中创建一个元素列表,每个元素都有自己的单击和悬停函数,但由于某些原因,所有列表元素都会绑定到我尝试绑定的最后一个函数。我尝试了很多解决方法,但它们似乎都能产生相同的效果。这是我的代码(用想法编写,而不是实际的变量

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
的代码,我可以向您展示如何使用闭包绕过它。