2017-01-08 2 views
0

В настоящее время я занимаюсь jQuery. Мой код - это неупорядоченный список, в котором есть 10 элементов списка. Каждый элемент получил другое название фильма, и я сохраняю выделение $('li') переменной $listItems При попытке .on method я столкнулся с чем-то неловким. Мой код просто добавляет к сегодняшней дате рядом с каждым элементом списка, когда пользователь mouseover элемент списка, а затем mouseout удаляет дату. Он отлично работает для элементов списка, которые я написал в файле HTML, но он не работает должным образом для элементов списка, которые я добавил с помощью javascript. Однако это ТОЛЬКО случается, когда я создаю как mouseover, так и mouseout по переменной $listItems. Когда я использую обычный селектор $('li'), он отлично работает для элементов, которые я добавил через HTML, и тех, которые добавлены через javascript.Сохранение выбора jQuery для переменных по-разному

Надежда мой код иллюстрирует то, что я пытаюсь понять ::

/* 
 

 
This DOESN'T append the date to list items added via JAVASCRIPT on mouseover 
 
    when the $('li') selection is saved to a variable, however it works fine if I used $('li') on mouseover and mouseout... 
 
*/ 
 

 
$(document).ready(function(){ 
 
var $listItems = $('li'); 
 

 
//Add items to the unordered list using javascript 
 
    var mainUL = document.getElementById('list'); 
 
\t var newMovies = ['Fantastic Four','Spectre','Fast and Furious','Jupiter Ascending','007', 'Zero Hour', 'The Runner', 'Brave','Never Back Down']; 
 
\t var newMovieEntry = document.createElement('li'); 
 
\t var newMovieName; 
 

 
\t newMovies.forEach(function(movie) { 
 
\t \t newMovieEntry = document.createElement('li'); 
 
\t \t newMovieName = document.createTextNode(movie); 
 
\t \t newMovieEntry.appendChild(newMovieName); 
 
\t \t newMovieEntry.textContent = movie; 
 
\t \t mainUL.appendChild(newMovieEntry); 
 
     }); 
 

 
//Create date, day, month and year. 
 
var date = new Date(); 
 
\t var day; 
 
\t var month; 
 
\t var year = date.getFullYear(); 
 
\t var dayNames = ['Sunday','Monday','Tuesday','Wednesday', 'Thursday', 'Friday', 'Saturday']; 
 
\t var monthNames = ['Jan','Feb','Mar','Apr', 'May', 'Jun', 'July','Aug','Sep','Oct','Nov','Dec']; 
 
\t day = dayNames[date.getDay()]; 
 
\t month = monthNames[date.getMonth()]; 
 
\t 
 
//Append formatted date on mouseover. 
 
\t $listItems.on('mouseover', function() { 
 

 
\t \t $(this).append(" <em>(" + date.getDate() + "/" + month + "/" + year + ")</em>"); 
 

 
\t }); 
 

 
//Remove formatted date on mouseout 
 
\t $listItems.on('mouseout', function(){ 
 
\t \t $(this).children('em').remove(); 
 
\t }); 
 
}); 
 
    
 
<!DOCTYPE html> 
 
<html lang="en"> 
 
<head> 
 
\t <script 
 
    src="http://code.jquery.com/jquery-1.12.4.min.js" 
 
    integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" 
 
    crossorigin="anonymous"></script> 
 
    <script type="text/javascript" src="junk.js"></script> 
 
\t <meta charset="UTF-8"> 
 
\t <title>Hello world!</title> 
 
\t <style type="text/css"> 
 

 
\t \t ul { 
 
\t \t \t 
 
\t \t \t text-align: center; 
 
\t \t \t display: -webkit-flex; 
 
\t \t \t display: -moz-flex; 
 
\t \t \t display: -ms-flex; 
 
\t \t \t display: -o-flex; 
 
\t \t \t display: flex; 
 
\t \t \t flex-direction: column; 
 
\t \t \t flex-wrap: nowrap; 
 
\t \t \t align-items: center; 
 
\t \t \t justify-content: center; 
 
\t \t } 
 

 
\t \t li { 
 
\t \t \t width: 60%; 
 
\t \t \t border: 5px solid; 
 
\t \t \t list-style-type: none; 
 
\t \t \t margin: 10px; 
 
\t \t \t line-height: 2em; 
 
\t \t } 
 

 
\t \t .newly-added { 
 
\t \t \t background-color: #00ff00 !important; 
 
\t \t \t color: #000 !important; 
 
\t \t } 
 

 
\t \t .royalblue { 
 
\t \t \t background-color: #405BFF; 
 
\t \t } 
 

 
\t \t .hazyorange { 
 
\t \t \t background-color: #FD8239; 
 
\t \t } 
 

 
\t \t .lightgreen { 
 
\t \t \t background-color: #76FF76; 
 
\t \t } 
 

 
\t \t \t .watermelon { 
 
\t \t \t background-color: #FC4343 !important; 
 
\t \t } 
 
\t </style> 
 
</head> 
 
<body> 
 
\t <ul id="list"> 
 
\t \t <h1>Movies List</h1> 
 
\t \t <li>Star Wars</li> 
 
\t \t <li>Saving Private Ryan</li> 
 
\t \t <li>Bridge of Spies</li> 
 
\t \t <li>Avatar</li> 
 
\t \t <li>Fury</li> 
 
\t \t <li>Home Alone</li> 
 
\t \t <li>Snowden</li> 
 
\t \t <li>Inception</li> 
 
\t \t <li>Wolf of Wall Street</li> 
 
\t \t <li>Legend</li> 
 
\t </ul> 
 
</body> 
 
</html>

Почему выбор JQuery ведет себя по-другому?

ответ

1

Вы сохраняете элементы списка, представленные в HTML, в свою переменную и добавляете новые элементы. Это не обновляет вашу переменную, поэтому добавленные элементы не получают функцию вашего .on-метода.

+0

А так после добавления новых элементов списка через javascript я должен переназначить свою переменную для повторного выбора jquery снова, чтобы включить их. –

+1

Или просто объявите переменную в этой точке. –