Ошибка Javascript: установить атрибут управления аудиообъектом True = = False

Я новичок в этом и не знаю точно, как сообщить об ошибке, но сначала я хочу подтвердить, что это ошибка, а затем продолжить. Но вот что я нахожу:

1) При создании атрибута управления аудиообъектом атрибут управления будет реагировать на строку, как если бы это было логическое значение. Например:

<button onclick="example()">Try this</button>
<script>

function example() {
    var aud = document.createElement("AUDIO");
        aud.setAttribute("src","example.mp3");
    aud.setAttribute("controls", "controls");
}

Okay, we've put controls in there because it makes controls equal controls: Thing is, you can put any old string in there and it works just fine -- apple, banana, pear, anything.

2) Разве значение не должно быть логическим? Что ж, когда вы пытаетесь использовать логическое значение, например false, вы все равно получаете значение true. (False == True) Это работает так же, как если бы вы ввели true.

... и если вы поместите что-нибудь, кроме true или false (просто введите что-нибудь, кроме целого числа, строки или значения true или false), вы получите false (или это просто не работает). Все равно true, а нестроковое, нецелое число равно false (или просто не работает).

Наконец, вы даже можете попробовать установить атрибут управления для доступного аудиоэлемента:

var aud = document.getElementById("idhere");
function accessAudioElement() { 
    aud.controls = false;
} 

По крайней мере, здесь истина и ложь на самом деле работают как истина и ложь, но, опять же, любая строка или целое число также даст вам истину, а любое нестроковое/нецелое число нарушит код.

Может ли кто-нибудь помочь мне здесь, потому что я не думаю, что это должно работать таким образом... и если да, то какой смысл использовать логическое значение, когда почти все остальное будет работать?

Конечно, я все еще учусь, так что, возможно, это не ошибка, может быть, по какой-то причине это должно работать именно так, но если это так, то кто-нибудь, пожалуйста, поделитесь со мной логикой, стоящей за этим.

Я просто не понимаю. Спасибо Магия


person Magic    schedule 24.04.2017    source источник
comment
У меня нет времени писать правильный ответ, но aud.controls = false; не устанавливает атрибут controls, он устанавливает свойство controls, которое ожидает логическое значение (или, в любом случае, истинное/ложное значение). В то время как с атрибутом важно наличие атрибута (с любым значением). См. также этот вопрос или этот.   -  person nnnnnn    schedule 24.04.2017


Ответы (2)


Возможно, вы захотите прочитать/поискать больше о Javascript Truthy $ Falsey. Это очень важно.

https://j11y.io/javascript/truthy-falsey/

введите здесь описание изображения

person Dalin Huang    schedule 24.04.2017
comment
Эй, ребята, большое спасибо за вклад. Я долго пытался разобраться в этом. Должно быть, пропустил некоторые из правдивых фейков по пути (или просто еще не дошел до этого). В любом случае, я получил его сейчас, и буду продолжать исследовать его еще дальше. - person Magic; 24.04.2017

Это расширенный ответ на то, что @nnnnnn предложил в комментариях.

ауд.управление = ложь; не устанавливает атрибут, он устанавливает свойство.

Вам нужно использовать метод setAttribute(), чтобы добавить указанный атрибут к элементу.

aud.setAttribute("controls", "controls");

И используйте метод removeAttribute(), чтобы удалить указанный атрибут из элемента.

aud.removeAttribute("controls");

Чтобы узнать больше об этих методах, посмотрите прикрепленные гиперссылки.

person Basil    schedule 24.04.2017