我正在尝试定位这些元素:
<audio data-key="65" src="sounds/clap.wav"></audio>
<audio data-key="83" src="sounds/hihat.wav"></audio>
<audio data-key="68" src="sounds/kick.wav"></audio>
<audio data-key="70" src="sounds/openhat.wav"></audio>
<audio data-key="71" src="sounds/boom.wav"></audio>
<audio data-key="72" src="sounds/ride.wav"></audio>
<audio data-key="74" src="sounds/snare.wav"></audio>
<audio data-key="75" src="sounds/tom.wav"></audio>
<audio data-key="76" src="sounds/tink.wav"></audio>
所以我正在尝试使用以下代码播放它们:
window.addEventListener('keydown', function(e){
const audio = document.querySelector('audio[data-key="${e.keyCode}"]');
console.log(audio);
if(!audio) return; // stop function
audio.play();
});
但是,按A时,数据键返回Null。这就是控制台所说的:
KeyboardEvent {isTrusted: true, key: "a", code: "KeyA", location: 0,
ctrlKey: false, …}
index-START.html:65 Uncaught TypeError: Cannot read property 'play' of null
at index-START.html:65
所以我知道我不工作,因为它为空。但是我不明白为什么它为空。
答案 0 :(得分:4)
欢迎使用StackOverflow。
您需要在该字符串周围使用字符串内插符号(`)才能正确执行$ {...}替换:
`audio[data-key="${e.keyCode}"]`
否则,选择器查询将接收原义字符串,该字符串试图匹配数据键等于"${e.keyCode}"
的元素。这称为“模板文字”,您可以阅读有关here细微差别的更多信息。
或者,您可以这样做以避免使用模板文字并坚持使用标准引号:
'audio[data-key="' + e.keyCode + '"]'
答案 1 :(得分:2)
您在查询选择器中犯了一个小错误,因为您没有使用文字字符串。
'应该是`
name: "antenna1", description: "this antenna is installed on the door", type_control_access_id: 2