Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.04.2015, 15:34
Интересующийся
Отправить личное сообщение для pensill Посмотреть профиль Найти все сообщения от pensill
 
Регистрация: 06.03.2015
Сообщений: 19

загрузка данных из JSON при щелчке
Хелп.
Имеется следующее:
При загрузке страницы загружается информация по товарам из JSON (это реализовано)

var request;
  if (window.XMLHttpRequest) {
    request = new XMLHttpRequest();
  } else {
    request = new ActiveXObject("Microsoft.XMLHTTP");
  }
  request.open('GET', 'js/info.json');
  request.onreadystatechange = function() {
    if ((request.readyState===4) && (request.status===200)) {
        var items = JSON.parse(request.responseText);

        for (var key in items) {
          var output = '<div class="goods__item" id=' + key + '>';
          output += '<img class="goods__img" src="img/' + items[key].url_small +'.jpg" />';
          output += '<div class="goods__info">';
          output += '<h2 class="goods__h2">' + items[key].name + '</h2>';
          output += '<div class="goods__desc">' + items[key].short_desc + '</div>';
          output += '</div>';
          output += '</div>';

          $('#goods_container').append(output);    // ЗАГРУЗКА ТОВАРОВ ИЗ JSON ПРИ ЗАГРУЗКЕ СТРАНИЦЫ (для каждого товара создается div своим ip (ip равен key))


          $('#' + key ).bind('click',  function(){
            console.log(items);  // в консоль выводятся нормально все объекты
            var out = '<ul class="result">';
                
                
                  out += '<p>' + items[key].name + '</p>';
                out += '</ul>';

            $('#update').html(out);  /// проблема с этой частью кода. Мне нужно реализовать, чтобы при щелчке по divу (тому диву который равен key ) с определенным товаром, выводилось в модальное окно вся информация о товаре, у меня сейчас загружается данные о последнем товаре в файле JSON
          });
        }
          
        }
      }
request.send();


И еще, правильно ли я делаю что использую .bind для отслеживания щелчка - так как на момент загрузки страницы этих divов нету

Последний раз редактировалось pensill, 13.04.2015 в 15:37.
Ответить с цитированием
  #2 (permalink)  
Старый 13.04.2015, 15:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

div своим ip (ip равен key)

А что такое есть ip?
Ответить с цитированием
  #3 (permalink)  
Старый 13.04.2015, 15:45
Интересующийся
Отправить личное сообщение для pensill Посмотреть профиль Найти все сообщения от pensill
 
Регистрация: 06.03.2015
Сообщений: 19

Сообщение от laimas Посмотреть сообщение
div своим ip (ip равен key)

А что такое есть ip?
В моем случае дивы будут иметь следующие id: 0, 1, 2, 3 (всего 4 шаблонных товара).
Или я не правильно понял вопрос?
Ответить с цитированием
  #4 (permalink)  
Старый 13.04.2015, 15:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

ID, это уже ближе к истине, но имена переменных, имена идентификаторов не должны начинаться с цифры.
Более того, уникальный идентификатор товара в базе (да и вообще любой записи) равный 0, это нонсенс, откуда вы такой выцарапали?
Ответить с цитированием
  #5 (permalink)  
Старый 13.04.2015, 15:58
Интересующийся
Отправить личное сообщение для pensill Посмотреть профиль Найти все сообщения от pensill
 
Регистрация: 06.03.2015
Сообщений: 19

Сообщение от laimas Посмотреть сообщение
ID, это уже ближе к истине, но имена переменных, имена идентификаторов не должны начинаться с цифры.
Более того, уникальный идентификатор товара в базе (да и вообще любой записи) равный 0, это нонсенс, откуда вы такой выцарапали?
Я это сделал для того, чтобы каждому диву с товаром присвоить уникальный id, могу сделать, чтобы были например были такие id #con_0 #con_1 #con_2 #con_0 /

Сообщение от laimas Посмотреть сообщение
Более того, уникальный идентификатор товара в базе (да и вообще любой записи) равный 0, это нонсенс, откуда вы такой выцарапали?
0 - это key первого товара в файле JSON.

Но вопрос сейчас не в этом, а том, почему при щелчке по определенному диву с информацией о товаре - в модальное окно загружается не информация по этому же товару из JSON, а информация последнего товара в файле json
Ответить с цитированием
  #6 (permalink)  
Старый 13.04.2015, 16:11
Интересующийся
Отправить личное сообщение для pensill Посмотреть профиль Найти все сообщения от pensill
 
Регистрация: 06.03.2015
Сообщений: 19

var output = '<div class="goods__item" id="container_'+ key +' ">';


Вот теперь id это : container_0 container_1 container_2 container_3

Но суть проблема у меня в другом
Ответить с цитированием
  #7 (permalink)  
Старый 13.04.2015, 16:22
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Потому, что это проход в цикле, последнее значение которого и в конечном итоге будет прописано как параметр. Если устанавливать обработчик по key в цикле, то нужно его устанавливать здесь:

$('#goods_container').append(output);

Только добавляя его таким образом:

$(output).appendTo('#goods_container').on('click', function() {
тогда здесь можно использовать key
});

Либо после цикла делегировать обработку щелчков элементу goods_container, а ключ получать из id текущего элемента.
Ответить с цитированием
  #8 (permalink)  
Старый 13.04.2015, 16:47
Интересующийся
Отправить личное сообщение для pensill Посмотреть профиль Найти все сообщения от pensill
 
Регистрация: 06.03.2015
Сообщений: 19

Сообщение от laimas Посмотреть сообщение
Либо после цикла делегировать обработку щелчков элементу goods_container, а ключ получать из id текущего элемента.
Сделал. Примерно как ты говорил, вот код:
$('#container_' + key).bind('click', function(){
            var id = $(this).attr('id').charAt(10);
            var out = '<ul class="result">';
                  out += '<p>' + items[idd].name + '</p>';
                out += '</ul>';

            $('#update').html(out);

Последний раз редактировалось pensill, 13.04.2015 в 16:51.
Ответить с цитированием
  #9 (permalink)  
Старый 13.04.2015, 17:43
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Тогда лучше в цикле сформировать html, после цикла его вставить в родительский элемент, и делегировать ему обработку.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Google Chart - не получается построить график из данных приходящих через json FRIE Общие вопросы Javascript 7 18.04.2014 19:07
Сортировка JSON данных в цикле Fareastaz jQuery 12 15.03.2013 20:20
Двойная Фильтрация данных таблицы David0707 Общие вопросы Javascript 0 19.03.2012 13:00
Вывод данных единожды, при открытии окна? Ggorsh Events/DOM/Window 1 28.04.2009 01:04
JS при щелчке на сылку появляется текст Ed51 Ваши сайты и скрипты 2 05.02.2009 23:57