Javascript 错误:设置音频对象控件属性 True = = False
Javascript Bug: set audio object controls attribute 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");
}
好的,我们将控件放在那里,因为它使控件等同于控件:
事情是,你可以把任何旧的字符串放在那里,它工作得很好 -- 苹果、香蕉、梨,任何东西。
2) 该值不是假定为布尔值吗?好吧,当您尝试布尔值时,例如 false,您仍然会得到 true。 (False == True) 就像您输入 true 一样。
...并且如果您输入除 true 或 false 以外的任何其他内容(只需键入整数、字符串或 true 或 false 值以外的任何内容),您将得到 false(或者它根本不起作用)。
一切都等于 true 而非字符串、非整数等于 false(或者根本不起作用)。
最后,您甚至可以尝试在访问的音频元素上设置控件属性:
var aud = document.getElementById("idhere");
function accessAudioElement() {
aud.controls = false;
}
至少这里的 true 和 false 实际上是 true 和 false,但是再一次,任何字符串或整数也会让你为 true,任何 non-string/non-integer 都会破坏代码。
有人可以帮我解决这个问题吗,因为我认为这不应该以这种方式工作...如果可以,当大多数其他方法都可以工作时使用布尔值有什么意义?
当然我还在学习,所以也许这不是一个错误,也许出于某种原因这应该是这样工作的,但如果是这样,请有人与我分享这背后的逻辑。
我就是不明白。
感谢魔法
您可能想要 read/search 更多关于 Javascript Truthy $ Falsey 的信息。很重要。
https://j11y.io/javascript/truthy-falsey/
这是对@nnnnnn 在评论中建议的内容的扩展回答。
aud.controls = 假;不设置属性,它设置 属性.
您需要使用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
我对此比较陌生,不知道如何报告错误,但我首先想确认这是一个错误,然后再继续。但这是我的发现:
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。 (False == True) 就像您输入 true 一样。
...并且如果您输入除 true 或 false 以外的任何其他内容(只需键入整数、字符串或 true 或 false 值以外的任何内容),您将得到 false(或者它根本不起作用)。 一切都等于 true 而非字符串、非整数等于 false(或者根本不起作用)。
最后,您甚至可以尝试在访问的音频元素上设置控件属性:
var aud = document.getElementById("idhere");
function accessAudioElement() {
aud.controls = false;
}
至少这里的 true 和 false 实际上是 true 和 false,但是再一次,任何字符串或整数也会让你为 true,任何 non-string/non-integer 都会破坏代码。
有人可以帮我解决这个问题吗,因为我认为这不应该以这种方式工作...如果可以,当大多数其他方法都可以工作时使用布尔值有什么意义?
当然我还在学习,所以也许这不是一个错误,也许出于某种原因这应该是这样工作的,但如果是这样,请有人与我分享这背后的逻辑。
我就是不明白。 感谢魔法
您可能想要 read/search 更多关于 Javascript Truthy $ Falsey 的信息。很重要。
https://j11y.io/javascript/truthy-falsey/
这是对@nnnnnn 在评论中建议的内容的扩展回答。
aud.controls = 假;不设置属性,它设置 属性.
您需要使用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