2013-11-21 2 views
0

Я новичок в кодировке и в основном изучаю материал здесь и там. Я попытался загрузить данные json массива через jquery и сформировал его с помощью html/css. Этот раздел прошел успешно. Теперь я пытаюсь отобразить предыдущий и следующий набор данных, но я могу получить его отображение в журнале консоли. Я думаю, что проблема может заключаться в том, как снова выполнить функцию формата после нажатия кнопки next/prev, но я не знаю, как это исправить ... Я думаю, что мне не хватает некоторых базовых знаний ... Это не должно быть это трудно, пожалуйста, подскажите и помогите ... Спасибо.Пропустить переменные и выполнить функции

//Loading JSON 
jQuery.getJSON("https://dl.dropboxusercontent.com/u/1972456/data/works.json", function(data){ 
    var i = 0; 

    // console.log(data.works[0]); 
    jQuery.each(data, function format(){ 
     $(".aboutWork").html('<h1>' + data.works[i].title + '</h1>'); 
     $('<h2>' + data.works[i].des + '</h2>').appendTo(".aboutWork"); 
     $('<p>' + data.works[i].detail + '</p>').appendTo(".aboutWork"); 
    });  

    $("#next").click(function(){ 

     i++; 
     console.log(data.works[i]); 
    }); 

    $("#prev").click(function(){ 
     i--; 
     console.log(data.works[i]); 
    }); 
}); 
+1

У вас есть куча ошибок кодирования здесь, но не ясно, что вы хотите, чтобы произошло. Вы получаете некоторые данные JSON, и вы перебираете его с помощью .each() '(в этом есть несколько ошибок кодирования, но я не знаю, чего вы пытаетесь выполнить). Что именно вы хотите совершить с '.each()'? И что должны делать обработчики '.click()'? – jfriend00

+0

Также я заметил, что вы задали 7 вопросов и еще не отметили ответы, принятые. Отметить ответы как принятые или дать отзыв, если ответы не разрешили ваш вопрос. Люди будут менее склонны помочь вам в будущем, если вы не примете их ответы. – Trevor

+0

@Trevor: может быть, он этого не видел http://meta.stackexchange.com/a/5235;) – JFK

ответ

0

это может быть проще

$.getJSON('https://dl.dropboxusercontent.com/u/1972456/data/works.json', function (data) { 
    var i=0,il=data.works.length-1; 
    function format() { $('.aboutWork').html('<h1>'+data.works[i].title+'</h1><h2>'+data.works[i].des+'</h2><p>'+data.works[i].detail+'</p>'); }//print info 
    format();//run initial 
    $('#next,#prev').on('click', function(){ 
     if ($(this).prop('id')==='next' && i<il) { i++; format(); }//add 
     else if ($(this).prop('id')==='prev' && i>0) { i--; format(); }//subtract 
    }); 
}); 

Это печатает первый, и вновь запускает функцию при нажатии кнопок, пока i находится в пределах массива.

сделал скрипку: http://jsfiddle.net/filever10/rqUsR/

+1

хорошей оптимизации кода, однако единственная потенциальная проблема, которую я вижу, - это то, что вы создаете новый http-запрос для каждого (следующего/предыдущего) щелчка, даже когда вы достигли предела. – JFK

+0

получил все исправления, и теперь он довольно прочный – FiLeVeR10

0

Попробуйте

EDIT # 2: оптимизированный код

function populate(data,i) { 
    $(".aboutWork").attr("id", "d" + data.works[i].id).html('<h1>' + data.works[i].title + '</h1>'); 
    $('<h2>' + data.works[i].des + '</h2>').appendTo(".aboutWork"); 
    $('<p>' + data.works[i].detail + '</p>').appendTo(".aboutWork"); 
} 

jQuery.getJSON("https://dl.dropboxusercontent.com/u/1972456/data/works.json", function (data) { 
    var i = 0; 
    jQuery.each(data, function format() { 
     populate(data,i); 
    }); 

    $(".nav").click(function (event) { 
     if (event.target.id == "next") { 
      if (i < (data.works.length - 1)) { 
       i++; 
       populate(data,i); 
      } 
     } else if (event.target.id == "prev") { 
      if (i > 0) { 
       i--; 
       populate(data,i); 
      } 
     } 
    }); 

}); 

Посмотреть последнее JSFIDDLE

ВНИМАНИЕ, что я добавил ID к div для демонстрационных целей

+0

не уверен, что существует необходимость в 'each', или для' populate' быть вне 'getJSON', вы можете сделать все это без' each' и просто использовать 'format' для выполнения этой работы. – FiLeVeR10

+0

@ FiLeVeR10: да, вы правы, «каждый» исходит из первоначальной измененной должности – JFK

Смежные вопросы