2015-05-31 4 views
0

У меня есть список фильмов, и когда я нажимаю на заголовок одного, я хочу, чтобы он отображал данные, которые извлекаются с XML-страницы для этого названия фильма в новое окно.JQuery .click показать правильное значение из цикла

Я перекручивание через файл XML, чтобы получить список фильмов, в первую очередь

$(xml).find('movie').each(function() { 
      //Adding the movie title. 
      $("body").append("<section class = 'list' id='m" + n + "'><p>" + $(this).attr("name") + "</p></section>"); 

говорят, например, мой первый фильм «Терминатор 2 Судный день»

Моя последняя попытка использования массив .. но он все еще просто отображает один и тот же заголовок для каждого заголовка, который я нажимаю, который является первым, Terminator.

$(xml).find('movie').each(function() { 
      //Adding the movie title. 
      $("body").append("<section class = 'list' id='m" + n + "'><p>" + $(this).attr("name") + "</p></section>"); 
      //adding movie website link 
      $("#m" + n).append("<a href='" + $(this).find("website").text() + "'>" + $(this).attr("name") + "'s website</a> <br />"); 
      //adding other movie info in new window 
      info.push(($(xml).find("movie").attr("name"))); 
      $("#m" + n+" p").click(function() { 
       mWindow = window.open("", "", "width=500,height=500"); 
       mWindow.document.write(info[info.length-1]); 
}); 
n++ 
}); 
+0

так что вопрос ур? – Alex

+0

Как я могу это исправить, поэтому, когда я нажимаю второй заголовок, он появляется с информацией для этого второго заголовка, то же самое для остальной части списка названий. На данный момент это только отображение информации для первого названия, независимо от того, что я нажимаю. – Kalkrin

+0

Каково название тега title в файле XML-фильмов? – Alex

ответ

0

Попробуйте это, я поставил его на скрипку

https://jsfiddle.net/Lg77ekoa/8/

Простой window.open() и отправки строки в всплывающее окно с главной страницы. Вы можете отправить любую вещь, это просто пример

HTML

<a onclick="show1(this)" id="titanic">Titanic</a> 
<br/> 
<a onclick="show1(this)" id="Tropic Thunder">Tropic Thunder</a> 
<br/> 
<a onclick="show1(this)" id="Hangover">Hangover</a> 

Javascript

function show1(elem) { 
    var myWindow = window.open("", "", "width=200, height=100"); 
    myWindow.document.body.innerHTML = $(elem).attr("id"); 

} 
+0

Я не собирался сделать ссылку на новую страницу. Я просто хочу, чтобы это было немного всплывающее, содержащее информацию. Моя проблема в том, что когда я нажимаю на всплывающее окно, он всегда показывает тот же результат, он не следует за циклом или чем-то еще. – Kalkrin

1

Изменить

info.push(($(xml).find("movie").attr("name"))); 

в

info.push($(this).attr("name")); 

... вставить имя атрибута из текущего элемента в петле в этом массиве, а не имя атрибута из первого согласованного результата от $(xml).find('.movie')

Edit: Это другой подход к тому, что вы вероятно, ищет:

$(xml).find('movie').each(function (i, elm) {   
     var $movie = $(elm), 
      $section, 
      movie = { 
       id: 'm' + id, 
       name: $movie.attr('name'), 
       website: $movie.find('website').text() 
      }; 

     $section = $('<section class="list" id="' + movie.id + '"><p>' + movie.name + '</p><a href="' + movie.website + '">' + movie.name + '\'s website</a><br></section>'); 
     $section.data('movie', movie); 
     $('body').append($section); 
}); 

$('body').on('click', 'section.list p', function (e) { 
    var $section = $(e.target).closest('section.list'), 
     movie = $section.data('movie'), 
     popupText; 

    popupText = movie.name + ', ' + movie.website; 

    mWindow = window.open("", "", "width=500,height=500"); 
    mWindow.document.write(popupText); 
}); 

Во-первых, она перебирает $(xml), где он создает и добавляет section для каждого фильма. Затем некоторые из данных видеофильма привязываются к этому разделу элементу с помощью .data()

После цикла, он связывает один щелчка прослушиватель событий, который определяет ближайший участок от щелкнули целей, хватает его данные и делает что-то дополнительно с ним, как открытие всплывающего окна с текстом, указанным в popupText

Надеюсь, это поможет.

+0

Вы близки, но он всегда возвращает последнее значение. и если я изменяю информацию [info.length-1], чтобы сказать info [info.length-2], она дает мне другое значение, которое раньше не делалось. Итак, у меня 5 титулов. когда я нажимаю, кажется, что n всегда будет 5 .. Мне нужно, чтобы число n внутри функции щелчка было таким же, как номер позиции, в которой заголовок находится в списке. 1. movie1 (n - 1, когда нажимается) 2. movie2 (n - 2 при нажатии) – Kalkrin

+0

Вы можете сделать 'var name = $ (this) .attr ('name');' вместо 'info.push ($ (this) .attr ('name'));' и затем 'mWindow.document.write (name);' подбирать его. Во всяком случае, я предлагаю другой подход, см. Обновленный ответ. – Rudi

0

Я понял.

info[n] = ($(this).attr("name")) + more information... 
function cHandle(num) { 
        $("#m" + n + " p").click(


function() { mWindow = window.open("", "", "weight = 500, height=500"); mWindow.document.write(info[num]) } 
        ) 
      } 
      cHandle(n); 

В настоящее время n передается в функцию щелчка правильно.

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