Переменная с "new Audio()" всегда "undefined".
Всех приветствую. Хочу проверить, содан ли "new Audio()" и записан ли в переменную. Если еще не создан - создать его и показать блок с аудио-плеером (т.е. при открытии страницы с аудио проигрыватель у меня будет скрытым, и при первом клике на любую аудио этот блок у меня откроется и тут же создастся аудио()).
Хотел я это сделать следующим образом: $("#playPause").click(function(){ if(typeof audio === "undefined"){ $("#audioPlayer").show(100); var audio = new Audio(); audio.autoplay = false; audio.loop = false; audio.volume = 0.5; audio.src = '001.mp3'; $(this).text("\u23f8"); audio.play(); }else{ if($(this).text() == "\u25b6") { $(this).text("\u23f8"); audio.play(); } else { $(this).text("\u25b6"); audio.pause(); } } }); И почему-то у меня и после выполнения первого условия (ведь в начале (до первого клика) переменной "audio" ещё нет), при втором клике всё равно выполняется первое условие, хотя и переменная "audio" уже создана, проигрывается аудио. Почему так происходит? Читал я, что с проверкой наличия переменной в яваскрипте всё сложнее, чем в PHP, в котором просто написал if(isset($audio)){} - и всё правильно понимается кодом. А в Яваскрипте есть какие-то нюансы... |
что то вас тут много непонятного
typeof audio === "undefined" если undefined в кавычках это уже обычная строка new Audio() это object. |
j0hnik,
На счет "undefined" я тоже думал, и пробовал ставить без кавычек. Просто на сайтах при проверках пишут с кавычками. Например, тут. Поэтому и написал в кавычках. Но без них такая же проблема. В общем, понял, что "undefined" нужно использовать без кавычек - буду делать так. Цитата:
|
var audio; $("#playPause").click(function(){ if(audio === undefined){ $("#audioPlayer").show(); audio = new Audio(); вот так попробуйте, не нужно обращаться к переменным до их объявления, и тип вам по сути не нужен, вам нужно просто знать undefined или нет |
j0hnik,
Так работает, спасибо! То есть, как я понял, правильнее и по науке будет сначала объявлять переменные, а потом уже прсваивать им переменные? Как, например, в Паскале? |
Булат Азат улы,
Нет, if(audio) обращение к переменной. если она не объявлена вылетит ошибка. Объявление и сразу же инициализация нормальная практика в js. |
j0hnik,
Понял, спасибо! |
Часовой пояс GMT +3, время: 04:53. |