2016-05-16 15 views
1

我已使用在點擊事件中激活的功能。我想用按鍵事件做同樣的事情。添加keypress使用現有功能的事件

function addToText(target) { 

    var exp = target.target; 
    //alert(exp.value); 
    if (newExp) { 

    //clearText(); 
    document.getElementById("expression").value = exp.value; 
    newExp=false; 

    } 

    else 
    document.getElementById("expression").value = document.getElementById("expression").value + exp.value; 

} 

這是使用的功能。我如何修改它以用於按鍵事件。目前,它最初不起作用(用於按鍵事件)。但點擊一次後,任何按鍵都會返回與之前點擊相同的號碼。

全部代碼在這裏:http://codepen.io/jpninanjohn/pen/JXVpYb?editors=1010

回答

2

這裏的是您最終的解決方案,我測試,如果charCode爲48和57之間,這意味着什麼,數字0和9

document.addEventListener('keypress', function(e){ 
     if (e.which >= 48 && e.which <= 57) 
     document.getElementById("expression").value+= String.fromCharCode(e.which); 
    }); 
+0

好的。這工作,但只有當我點擊裏面的計算器的地方。 – leoOrion

+0

你確定嗎?我已經測試了您的編輯過的codepen,即使我在計算器外單擊並開始輸入,它也可以正常工作。 –

+0

是的,我再次檢查,它也適用於外部點擊。但爲什麼最初點擊? – leoOrion

0

您可以使用此功能 -

window.onkeyup = function(e) { 
    var key = e.keyCode ? e.keyCode : e.which; 
document.getElementById("expression").value += key-48; //for getting the number 

    alert(key); 
    if (key == 38) { 
     //whatever 
    }else if (key == 40) { 
     // whatever 
    } 
} 

source

而你需要+添加到=

document.getElementById("expression").value+= 

代替 -

document.getElementById("expression").value= 
+0

VAR鍵= e.keyCode? e.keyCode:e.which;這條線是做什麼的? – leoOrion

+0

這是「內聯如果」 –

0

你要添加的按鍵事件不同的功能之間,因爲按鍵事件得到按壓鍵的值不同,不target.target

function addToTextKeypress(event) { 

    var exp = String.fromCharCode(event.keyCode); 
    //alert(exp); 
    if (newExp) { 

    //clearText(); 
    document.getElementById("expression").value = exp; 
    newExp=false; 

    } 

    else 
    document.getElementById("expression").value = document.getElementById("expression").value + exp; 

} 

以後你需要刪除exp.value,因爲它具有直接價值