[英]How to remove div class using keyup function?
我想問你關於 keyup 事件監聽器的問題,我的不工作。 當我按下該鍵時,它會將按下的類添加到 div。 但是當我釋放密鑰時,它不會刪除該類
function keyPressed(e){ const key = document.querySelector(`.key[data-key="${e.keyCode}"]`); key.classList.add('pressed'); } function removePressed(e) { if(e.propertyName !== 'opacity') return; this.classList.remove('pressed'); } const keys = document.querySelectorAll('.key'); keys.forEach(key => key.addEventListener('keyup', removePressed)) window.addEventListener('keydown', keyPressed);
.pressed { transform: scale(1.0); opacity: 0.7; }
<div data-key="55" class="key item6"> <kbd>7</kbd> </div>
試試看
HTML:
<div data-key="55" class="key-item6">
<kbd>7</kbd>
</div>
JS:
$('.key-item6').keyup(function () {
if ($.trim($('.key-item6').val()).length) {
$(this).removeClass('pressed');
}
});
很難說,但是您可以執行一些簡單的調試。 更改以下代碼行:
this.classList.remove('pressed');
對此:
console.log(this.classList)
外觀如下:
function keyPressed(e){
const key = document.querySelector(`.key[data-key="${e.keyCode}"]`);
key.classList.add('pressed');
}
function removePressed(e) {
if(e.propertyName !== 'opacity') return;
console.log(this.classList)
}
const keys = document.querySelectorAll('.key');
keys.forEach(key => key.addEventListener('keyup', removePressed))
window.addEventListener('keydown', keyPressed);
如果控制台顯示您要刪除的類的元素,那么您就走對了!
問題出在事件處理程序上。 您正在將事件處理程序附加到鍵上,而該鍵不在焦點上。 因此,您的keyup事件實際上是在window
觸發的。
如果您真的想在.key
上使用keyup,請使用tabindex
並首先focus
按下的元素上。 請參閱隨附的代碼。
function keyPressed(e){ const key = document.querySelector(`.key[data-key="${e.keyCode}"]`); key.classList.add('pressed'); key.focus(); } function removePressed(e) { // if(e.propertyName !== 'opacity') return; this.classList.remove('pressed'); } const keys = document.querySelectorAll('.key'); keys.forEach(key => key.addEventListener('keyup', removePressed)) window.addEventListener('keydown', keyPressed);
.pressed { transform: scale(1.0); opacity: 0.7; }
<div data-key="55" class="key item6" tabindex=0> <kbd>7</kbd> </div>
同樣, e.propertyName
是未定義的,導致其返回。
我的建議是將keyup綁定到window,並使用與keyPressed
相同的方法從類列表中刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.