Javascript Bug:设置音频对象控件属性 True = = False

Posted

技术标签:

【中文标题】Javascript Bug:设置音频对象控件属性 True = = False【英文标题】:Javascript Bug: set audio object controls attribute True = = False 【发布时间】:2017-04-24 04:39:35 【问题描述】:

我对此很陌生,不知道如何报告错误,但我首先想确认这是一个错误,然后从那里继续。但这是我的发现:

1) 创建音频对象的控件属性时,控件属性将响应一个字符串,就好像它是一个布尔值一样。 例如:

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

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

好的,我们在其中放置了控件,因为它使控件等同于控件: 问题是,你可以把任何旧绳子放在那里,它工作得很好——苹果、香蕉、梨,任何东西。

2) 值不应该是布尔值吗?好吧,当您尝试布尔值(例如,假)时,您仍然会得到真。 (False == True) 就像您输入 true 一样。

...如果您输入除 true 或 false 之外的任何其他内容(只需键入除整数、字符串或 true 或 false 值之外的任何内容),您将得到 false(或者它只是不起作用)。 一切都等于真,非字符串、非整数等于假(或根本不起作用)。

最后,您甚至可以尝试在访问的音频元素上设置 controls 属性:

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

至少在这里 true 和 false 实际上可以作为 true 和 false 工作,但是再一次,任何字符串或整数也会让你为真,任何非字符串/非整数都会破坏代码。

有人可以在这里帮助我吗,因为我认为这不应该以这种方式工作...如果可以,那么在大多数其他方法都可以工作的情况下,使用布尔值有什么意义?

当然我还在学习,所以也许这不是一个错误,也许出于某种原因,这应该是这样工作的,但如果是这样的话,请有人与我分享这背后的逻辑。

我只是不明白。 谢谢魔术

【问题讨论】:

我没有时间写一个正确的答案,但是aud.controls = false; 没有设置controls 属性,它设置了controls 属性,它需要一个布尔值(或truthy/无论如何,虚假价值)。而对于属性,属性的存在(具有任何值)才是最重要的。另请参阅 this question 或 this one。 【参考方案1】:

这是 @nnnnnn 在 cmets 中建议的扩展答案。

aud.controls = false;不设置属性,它设置属性。

你需要使用setAttribute()方法给元素添加指定的属性。

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

并使用removeAttribute() 方法从元素中移除指定的属性。

aud.removeAttribute("controls");

有关这些方法的更多信息,请查看随附的超链接。

Element.setAttribute() Element.removeAttribute() When to use setAttribute vs .attribute= in javascript? html - attributes vs properties

【讨论】:

【参考方案2】:

您可能想阅读/搜索有关 Javascript Truthy $ Falsey 的更多信息。这很重要。

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

【讨论】:

大家好,感谢 mil 的输入。很长一段时间以来,我一直试图理解这一点。一路上一定错过了一些真实的虚假(或者只是还没有得到它)​​。无论如何,我现在已经得到它,并将继续进一步研究它。

以上是关于Javascript Bug:设置音频对象控件属性 True = = False的主要内容,如果未能解决你的问题,请参考以下文章

Win10系列:JavaScript多媒体

C#.Net ComboBox控件设置DropDownList之后背景颜色问题,以及发现的微软的一个BUG

十:audio 音频

JavaScript按照对象的某个属性进行排序

JavaScript按照对象的某个属性进行排序

自定义video控件