Переменная с "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, время: 17:28. |