2014-01-17 30 views
0

不是那麼忍者編輯:我正在德國鍵盤上工作。當德語鍵盤蓋上蓋子時,就像按下移位按鈕一樣處理數字鍵。 IIRC這不會發生在英國/美國的鍵盤上。jQuery/HTML計算器不捕捉Capslock(德國鍵盤)

只是使用jQuery/html製作一個簡單的瀏覽器計算器,除了當Caps打開並且我的計算器開始接受垃圾作爲輸入時,它擁有一切hunky dory。以下是我的輸入驗證器。 Event.keycode不幸的是沒用。

function validInput(event) { 
    return event.keyCode === 13 || event.keyCode === 8 || event.keyCode === 10 //enter, backspace and return 
     || event.keyCode === 67 // "C" for clear 
     || (event.which >= 48 && event.which <= 57) // 0-9 **chars** over the alpha buttons 
     || (event.keyCode >= 96 && event.keyCode <= 123); //numpad and fn buttons 

感謝您花時間閱讀本文。下面的完整代碼,雖然我不認爲你需要它...

$(function(){ 
    $("input.number").on("click",clickButton); 
    $("body").on("click", revertFocus);    // frag Marc 
    $(document).on("keyup keydown", keyHandler) 
}); 

function keyHandler(event) { // handles enter; clear and return keys 

    if (event.shiftKey || !validInput(event)) 
     return false; 

    if(event.type == "keyup"){ 
     if (event.keyCode == 13 || event.keyCode == 10) { 
      rechner(); 
     } 

     if (event.keyCode == 67) { //clears the screen 
      $("#userInput").val(""); 
     } 
    }else{ 
     if (event.keyCode == 67) { 
      return false; 
     } 
    } 
    return true; 
} 

function rechner() { 
    var userInput = $("#userInput").val(); 
    var answer = eval(userInput.replace(",",".")); 
    $("#userInput").val(String(answer).replace(".",",")); 
} 

function clickButton(){ 
    var input = $(this).val(); 
    if (input=='c'){ 
     $("#userInput").val(""); 
     return; 
    } 
    $("#userInput").val($("#userInput").val() + input); 
} 


function validInput(event) { 
    return event.keyCode === 13 || event.keyCode === 8 || event.keyCode === 10 //enter, backspace and return 
     || event.keyCode === 67 // "C" for clear 
     || (event.which >= 48 && event.which <= 57) // 0-9 over the alpha buttons 
     || (event.keyCode >= 96 && event.keyCode <= 123); //numpad and fn buttons 
} 


function revertFocus() { 
    $("#userInput").focus(); 
} 
+0

capslock keycode是20 –

+0

有沒有什麼原因讓你有時使用'event.wich',有時'event.keyCode'? – Johnny5

+1

@ Johnny5 - 事件keyCode檢測到某個按鍵被按下,而event.which檢測哪個字符被打印到屏幕上。因此,keyCode不關注大寫鎖定和它的影響。 – rory

回答

1

您可以添加另一級別的驗證後,文本已被輸入到輸入。 如果文本包含無效字符,請刪除它們。

無論如何, 我在jsfiddle中測試了你的代碼,並且無法獲取任何無效字符。你如何重現這個問題?

http://jsfiddle.net/jd2Js/

$(function(){ 
$("input.number").on("click",clickButton); 
$("body").on("click", revertFocus);    // frag Marc 
$(document).on("keyup keydown", keyHandler) 

});

function keyHandler(event) { // handles enter; clear and return keys 

if (event.shiftKey || !validInput(event))4 
    return false; 

if(event.type == "keyup"){ 
    if (event.keyCode == 13 || event.keyCode == 10) { 
     rechner(); 
    } 

    if (event.keyCode == 67) { //clears the screen 
     $("#userInput").val(""); 
    } 
}else{ 
    if (event.keyCode == 67) { 
     return false; 
    } 
} 
return true; 

}

function rechner() { 
var userInput = $("#userInput").val(); 
var answer = eval(userInput.replace(",",".")); 
$("#userInput").val(String(answer).replace(".",",")); 

}

function clickButton(){ 
var input = $(this).val(); 
if (input=='c'){ 
    $("#userInput").val(""); 
    return; 
} 
$("#userInput").val($("#userInput").val() + input); 

}

function validInput(event) { 
return event.keyCode === 13 || event.keyCode === 8 || event.keyCode === 10 //enter, backspace and return 
    || event.keyCode === 67 // "C" for clear 
    || (event.which >= 48 && event.which <= 57) // 0-9 over the alpha buttons 
    || (event.keyCode >= 96 && event.keyCode <= 123); //numpad and fn buttons 

}

FUNC revertFocus(){ $(「#userInput」)。focus(); }

+0

褲子,我忘記提及我在德國鍵盤上,這使得數字按鈕的動作就像按住shift鍵時一樣是在 – rory

+0

在這種情況下,只搜索@#$%的texbox值等等...按鍵後,並刪除 – CodeToad

+0

這是我的原始解決方案,但我不希望符號出現之前,他們得到清除。不用擔心,除了這個小故障,這是計算器唯一的問題(迄今爲止),所以我很開心 – rory