簡體   English   中英

javascript凍結標簽和輸入

[英]javascript freezing tabs, and input

我正在做一個JavaScript onkeypress函數。

    function report() {
        while (1 == 1) {
        window.onkeypress = function(event) {
            /* from this point down, keylog functions.    */
            // above is a variable
            if (event.keyCode == 32) {
                console.log("Spacebar._rep")
            }
            if (event.keycode == 33) {
                console.log("escalation-Mark._rep")
            }
            if (event.keycode == 34) {
                console.log("quotation-Mark._rep")
            }
            if (event.keycode == 35) {
                console.log("hashtag._rep")
            }
            if (event.keycode == 36) {
                console.log("dollar-Sign._rep")
            }
            if (event.keycode == 37) {
                console.log("percent-Symbol._rep")
            }
            if (event.keycode == 38) {
                console.log("pi")
            }
        }
    }
}
report()

每當我運行此代碼時,但是它凍結了所有形式的輸入,我仍然可以滾動,打開選項卡並單擊。 我無法關閉標簽頁,重新加載或更改JavaScript代碼。 我嘗試了有無變量,並且嘗試了修改它。 當它們只是一項關鍵功能時,它的工作原理絕對不錯,但是一旦我添加了幾項功能,它就會死機。 我縮進了,縮進了什么都沒有。 我已經檢查了其他一些類似的問題,這些問題據說可以執行諸如remove variable之類的事情,而我做到了,但它仍然凍結。

您正在創建一個死循環來凍結該選項卡。

while (1 == 1) {
    //infinite loop
}

無需這樣做,只需將偵聽器附加到每次事件發生時觸發回調的窗口即可:

window.addEventListener('keypress', function (e) {
    console.log(e)
});

onkeypress屬性設置並返回當前元素的onKeyPress事件處理程序代碼。

由於您當前的元素是運行report時的window ,因此事件偵聽器將監聽任何按鍵,因此實際上並不需要while語句,它實際上會使您的應用程序凍結。

 function report() { window.onkeypress = function(event) { if (event.keyCode == 32) { console.log("Spacebar._rep") } if (event.keycode == 33) { console.log("escalation-Mark._rep") } if (event.keycode == 34) { console.log("quotation-Mark._rep") } if (event.keycode == 35) { console.log("hashtag._rep") } if (event.keycode == 36) { console.log("dollar-Sign._rep") } if (event.keycode == 37) { console.log("percent-Symbol._rep") } if (event.keycode == 38) { console.log("pi") } } } report() 
 1 

之所以凍結是因為while (1==1)無限運行時,您不應該這樣編寫代碼。 它阻止了瀏覽器

    window.onkeypress = function(event) {
        /* from this point down, keylog functions.    */
        // above is a variable
        if (event.keyCode == 32) {
            console.log("Spacebar._rep")
        }
        if (event.keycode == 33) {
            console.log("escalation-Mark._rep")
        }
        if (event.keycode == 34) {
            console.log("quotation-Mark._rep")
        }
        if (event.keycode == 35) {
            console.log("hashtag._rep")
        }
        if (event.keycode == 36) {
            console.log("dollar-Sign._rep")
        }
        if (event.keycode == 37) {
            console.log("percent-Symbol._rep")
        }
        if (event.keycode == 38) {
            console.log("pi")
        }
    }

這就是所需要的,代碼將被“異步”調用

嘗試刪除“ while(1 == 1)”。 似乎並沒有離開while循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM