Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.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 在jQuery中动态使用JSON变量_Javascript_Jquery_Ajax_Json_Mouseenter - Fatal编程技术网

Javascript 在jQuery中动态使用JSON变量

Javascript 在jQuery中动态使用JSON变量,javascript,jquery,ajax,json,mouseenter,Javascript,Jquery,Ajax,Json,Mouseenter,我有两个div,#placeholder和#imageLoad。当用户单击特定的拇指时,其较大的版本(拇指2)应显示在#imageLoad DIV中 以下是需要修复的jQuery: $.getJSON('jsonFile.json', function(data) { var output="<ul>"; for (var i in data.items) { output+="<li><img src=i

我有两个div,#placeholder和#imageLoad。当用户单击特定的拇指时,其较大的版本(拇指2)应显示在#imageLoad DIV中

以下是需要修复的jQuery:

  $.getJSON('jsonFile.json', function(data) {
        var output="<ul>";
        for (var i in data.items) {
            output+="<li><img src=images/items/" + data.items[i].thumb + ".jpg></li>";
        }
        output+="</ul>";
        document.getElementById("placeholder").innerHTML=output;
  });


  //This is wrong!! Not working..
  $('li').on({
         mouseenter: function() {
             document.getElementById("imageLoad").innerHTML="<img src=images/items/" +
             data.items[i].thumb2 + ".jpg>";
         }
  });    

变量数据仅在getJSON调用的回调函数中声明,因此在其他方法/事件处理程序中不可用。获取时将其存储到全局变量。如下图所示:

球形变种

$.getJSON('jsonFile.json', function(data) {
    globalData = data;
    var output="<ul>";
    for (var i in data.items) {
        output+="<li id=\"listItem" + i + "\"><img src=images/items/" + data.items[i].thumb + ".jpg></li>";
    }
    output+="</ul>";
    document.getElementById("placeholder").innerHTML=output;
});


//This is wrong!! Not working..
$('li').on({
     mouseenter: function() {
         var index = parseInt($(this).attr('id').substring(8));
         document.getElementById("imageLoad").innerHTML="<img src=images/items/" +
         globalData.items[index].thumb2 + ".jpg>";
     }
});    
$.getJSON('jsonFile.json',函数(数据){
globalData=数据;
var输出=“
    ”; for(data.items中的var i){ 输出+=“
  • ”; } 输出+=“
”; document.getElementById(“占位符”).innerHTML=输出; }); //这是错误的!!不工作。。 $('li')。在({ mouseenter:function(){ var index=parseInt($(this).attr('id').substring(8)); document.getElementById(“imageLoad”).innerHTML=“”; } });
$.getJSON('jsonFile.json',函数(数据){
var输出=“
    ”; 对于(变量i=0;i”; } 输出+=“
”; $(“#占位符”).html(输出); $('li')。在({ mouseenter:function(){ $(“#imageLoad”).html(“”); } }); });
首先,
$.getJSON
是异步的,因此在异步函数之后的mouseenter绑定将不起作用,因为附加事件处理程序时,
li
元素不存在。其次,将第二个图像源存储在每个li元素的数据属性中,并在mouseenter函数中检索该数据属性:

$.getJSON('jsonFile.json', function(data) {
    var out = $("<ul />");
    for (var i in data.items) {
        $('<li />', {
            src: 'images/items/' + data.items[i].thumb + '.jpg'
        }).data('big', data.items[i].thumb2).appendTo(out);
    }
    $("#placeholder").html(out);
});

$('#placeholder').on('mouseenter', 'li', function() {
    var bigImg = $('<img />', {
        src: 'images/items/' + $(this).data('big') + '.jpg'
    });
    $("#imageLoad").html(bigImg);
});​
$.getJSON('jsonFile.json',函数(数据){
var out=$(“
    ”); for(data.items中的var i){ $(“
  • ”{ src:'images/items/'+data.items[i].thumb+'.jpg' }).data('big',data.items[i].thumb2).appendTo(out); } $(“#占位符”).html(out); }); $('#占位符')。在('mouseenter','li',function()上{
    var bigImg=$('这将不起作用,您在第二个代码块中有一个对'i'的引用。啊,是的,谢谢Hristo,已更新代码以包含ID,并在第二个函数中使用相同的ID。我如何将'i'重新用作引用?或者我可以做些什么来让鼠标指针工作?提前谢谢。请查看更新的代码。我在那里使用了i作为ID。因此,您可以从中提取i值并使用它。我将更新我的答案以使用更可靠的ID。这现在可以工作,但您并不需要全局变量来存储数据。只需按照我的示例将另一个缩略图作为属性存储到。创建新元素(ul)后使用jquery数据方法向其添加数据。然后,您可以在任何地方使用它。该链接使一些复杂的内容看起来很简单。您能否详细介绍数据,如何将其关联,或将其与其他jquery函数一起使用?你们三个人的答案似乎都不起作用。Adeneo,您能建议另一种解决方案吗?我对AJAX一无所知,但perhaps我需要声明Async:false??我很困惑,但我知道这是一个简单的任务。任何输入都会很好,谢谢!@user1644123我已经更新了我的代码(在我自己的答案中)以在()上使用$('li')AJAX调用回调中的事件,因此它现在应该可以工作,请尝试一下。我测试了您的更新Hristo,现在没有显示JSON数据。这似乎只会使前两项的悬停生效。JSON中接下来的所有内容都没有工作悬停。知道它为什么只工作两次吗?注意:我测试了,然后添加了更多JSON数据d再次测试。我更新了我的答案,我引用了数据。items[I]虽然我应该直接引用我。测试更新时唯一出现的是没有JSON数据的列表点。没有出现JSON。我不喜欢(…in…)循环中的这个,将它改为(;;)的标准它现在应该可以工作了,我已经把代码放在这里了,它可以工作了(在Firebug控制台中,你可以看到它正在尝试加载图像,尽管它们是404,但是在你的机器上它可以工作)-
    $.getJSON('jsonFile.json', function(data) {
        var output="<ul>";
        for (var i = 0; i < data.items.length; i++) {
            output += "<li><img thumb2='" + data.items[i].thumb2 + "' src='images/items/" + data.items[i].thumb + ".jpg'></li>";
        }
        output += "</ul>";
        $("#placeholder").html(output);
    
        $('li').on({
            mouseenter: function() {
                $("#imageLoad").html("<img src='images/items/" + $(this).find('img').attr('thumb2') + ".jpg'>");
            }
        });   
    });
    
    $.getJSON('jsonFile.json', function(data) {
        var out = $("<ul />");
        for (var i in data.items) {
            $('<li />', {
                src: 'images/items/' + data.items[i].thumb + '.jpg'
            }).data('big', data.items[i].thumb2).appendTo(out);
        }
        $("#placeholder").html(out);
    });
    
    $('#placeholder').on('mouseenter', 'li', function() {
        var bigImg = $('<img />', {
            src: 'images/items/' + $(this).data('big') + '.jpg'
        });
        $("#imageLoad").html(bigImg);
    });​