2015-07-21 4 views
0

У меня есть этот код в JavaScript:JavaScript глобальную переменную в функции и .hover

status = document.getElementById('status2'); 

$('#slider > img').hover(
    function() { 
     stopLoop(); 
     status.innerHTML = "paused"; 
    }, 
    function() { 
     startSlider(); 
     status.innerHTML = "playing"; 
    } 
); 

где я смотрю на все изображения в моем HTML, которые имеют ползунок ID и когда я зависать на то я хочу, чтобы добавить слово (приостановлено или воспроизведено) тегу span, который имеет статус id2. Но я не знаю, почему глобальная переменная не работает, единственный способ, которым я делаю это работа ставит локальную переменную внутри каждого несильно, как это:

function() { 
    stopLoop(); 
    var status = document.getElementById('status2'); 
    status.innerHTML = "paused"; 
}, 
function() { 
    startSlider(); 
    var status = document.getElementById('status2'); 
    status.innerHTML = "playing"; 
} 

Может кто-нибудь мне, почему?

ПРИМЕЧАНИЕ: как я уже говорил, все работает с локальными переменными, но не устанавливает его как глобальную переменную.

+1

потому что к тому времени, когда вы запустите 'status = document.getElementById ('status2');' DOM не был готов, поэтому вы получите 'status' как' undefined', и поэтому он не будет работать дальше – vinayakj

+1

Вы говорите, что ищете все изображения с ползунком id, но ваш код проверяет изображения, которые являются прямыми дочерними элементами элементов с ползунком id. Возможно, [эта страница] (https://css-tricks.com/child-and-sibling-selectors/) объясняет это лучше? Изображения с идентификатором 'slider' выбраны с помощью '$ ('img # slider')', а дети, являющиеся изображениями элементов с id 'slider', выбираются с помощью '$ ('# slider> img'). – FWDekker

+0

Если вы хотите, вы можете запустить полный jQuery и использовать 'var status = $ (" status2 ");' и 'status.html (" playing ");'. – Anders

ответ

1

Потому что к тому времени, вы бежите

status = document.getElementById('status2'); 

DOM не была готова, так что вы получите статус не определен, и поэтому он не будет работать дальше.

Так как поместить код в ready

$(document).ready(function(){ 
    //code goes here 
}) 

или

Поместите скрипт в конец файла.

+0

Добавляем в .ready –

+0

Я уже использовал document.ready раньше в другой функции, и этот код был ниже этого, я решил использовать функцию JQuery .html() вместо innerHTML и sliderStatus = $ ("status2") вместо off document.getElementById ('status2'); и это сработало – angel

+0

Не имеет смысла .. написание кода ниже .ready does not означает, что он будет настраиваться на DOM, как вы сказали: «Я уже использовал документ. раньше в другой функции, и этот код был ниже этого». – vinayakj

1

ли добавить в

$(document).ready(function(){ 

}); 

Это ждет, чтобы выполнить код внутри, пока все не закончится загрузка. Таким образом, он не должен возвращаться не определен.

ТАКЖЕ

я не мог не заметить, что вы, кажется, пытается дать несколько элементов один и тот же идентификатор.

Не используйте идентификаторы для нескольких элементов. Это не то, как они предназначены для использования, и они не работают таким образом. Если вы даете несколько элементов одному и тому же идентификатору, а затем попробуйте и стилизуете их с помощью CSS, он будет только стиль первого. Используйте класс. Если вы используете

document.getElementById(); 

, чтобы попытаться захватить несколько элементов с одинаковым ID, то сценарий будет только захватить первый элемент с таким идентификатором, потому что, учитывая, что это идентификатор, он ожидает, что только один элемент. Если вы хотите работать с несколькими элементами, использовать класс, а затем использовать

document.getElementsByClassName(); 

это будет захватить все элементы с этим классом. Так, например, говорят, что у вас есть четыре элемента span с классом «foo».Для того, чтобы захватить все эти и изменить текст, выполните следующие действия:

elements=document.getElementsByClassName("foo"); 
for (i=0; i<elements.length; i++){ 
elements[i].innerHTML='insert your text here'; 
} 

О глобальных и локальных переменных, глобальная переменная объявляется так:

global_variable='foo' 

и локальная переменная объявлена ​​следующим образом:

var local_variable='foo' 

Глобальная переменная может быть объявлена ​​в любом месте сценария и использоваться в любом месте сценария (и даже в других сценариях, прикрепленных к одному и тому же файлу HTML), тогда как локальный переменный если он объявлен внутри функции, может использоваться только внутри функции, или если вы объявляете ее вне функции, ее нельзя получить в пределах функции, если вы не передадите ей переменную.

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

+0

Я уже использовал document.ready ранее в другой функции, и этот код был ниже этого, я решил использовать функцию JQuery .html() вместо innerHTML и sliderStatus = $ ("status2") вместо этого document.getElementById ('status2 «); и он работал – angel

+0

'global_variable = 'foo'' его не то, как глобальная переменная объявляется как одна из ее, и эта является неявной глобальной. – vinayakj

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