2017-03-27 68 views
0

我看到每個答案都是e.preventDefualt,但這並不能幫助我的情況。我的情況是,我想只阻止空格鍵的滾動部分。當我使用e.preventDefault時,它停止滾動,但它也使得它在文本框中時我無法在其中鍵入空格。所以我想知道是否有辦法防止滾動,但實際上允許鍵入空格。如何僅在空格鍵被按下時禁止滾動?

onWindowKeyDown = function(e){ 
    switch(e.which){ 
    case 9: 
     e.preventDefault(); 
    break; 
    case 32: 
     console.log(e); 
     e.preventDefault(); 
    break; 
    } 
}; 

行,所以我已經嘗試這樣做,我試圖stopPropagation和眼前的版本,以及。只有preventDefualt實際上停止了滾動,但是當我去鍵入文本框時,它不允許輸入實際空格。

+0

請閱讀[問]。重要短語:「搜索和研究」和「解釋......阻止你自己解決它的任何困難」。 –

+0

我每天大部分時間都在尋找答案,而我自己解決問題的困難就像我說的那樣,每個人都說要使用e.preventDefualt,但這並不能解決我的問題,而且我也沒有見過任何人否則也有我的問題。 – MrGameboy18

+0

請僅顯示一些代碼,包括您嘗試過的內容以及您的研究成果。就像它在我鏈接到的文章中所說:*包含足夠的代碼以允許其他人重現該問題。有關這方面的幫助,請閱讀[mcve]。* –

回答

0

我沒有代碼來引用來驗證這一點,但關閉我的頭頂,我相信你可以檢查e的目標,看看它是否是一個輸入元素。如果e.target不是輸入或texarea,那麼防止默認?

+0

那麼它不是我需要阻止它有時與其他人。它,我需要它只有滾動部分阻止。 – MrGameboy18

0

嗨,你可以檢查事件的目標,以檢查是否已被按鍵的目標元素是輸入元素或不。如果目標是html的主體,則可以防止滾動。這裏是一個工作環節:https://jsfiddle.net/Lgyrn5bd/

window.onkeydown = function(e) { 
if(e.keyCode == 32 && e.target == document.body) { 
    e.preventDefault(); 
    return false; 
} 
}; 

當您檢查事件(e.target)的目標對象是輸入/ textarea的,如果你在一個元素中鍵入否則這將是身體。因此,當您實際輸入輸入元素時,您可以保持空格鍵運作。

+0

修復它,非常感謝我會upvote您的答案,但我剛剛開始堆棧溢出。 – MrGameboy18

+0

我很高興我能幫忙:) – lhavCoder

相關問題