1

リアルタイムで数値を他の基数に変換するこの小さな JavaScript ツールがあります。これは、各テキスト ボックスでキーが押されるたびに更新関数checkchangedec()を呼び出すことなどによって行われます。checkchangehex()それは正常に動作します。

私ができるようにしたいのは、矢印キーを使用して「フォーカスを移動する」ことです。を使用して以前にこれを正常に実行しましたevent.keyCodeが、問題は、要素の onkeydown および onkeypressed を使用して既に関数を呼び出していることです。onkeydown または onkeypressed 属性を介して複数の関数を呼び出す方法を知りません。

具体的には、数値コンバーターの JSFiddle を次に示します。入力は次のとおりです

<input id="dec" onkeypress="return isNumberKey(event);" onkeydown=checkchangedec() value="10">

およびそれが呼び出す関数:

function checkchangedec() {
setTimeout(

    function () {
        if (id('dec').value !== "") {
            id('hex').value = parseInt(id('dec').value, 10).toString(16);
            id('bin').value = parseInt(id('dec').value, 10).toString(2);
            id('cbi').value = parseInt(id('dec').value, 10).toString(id('cbival').value);
        }
    }, 20);
}   


function isNumberKey(evt) {
    var charCode = (evt.which) ? evt.which : event.keyCode;
    if (charCode > 31 && (charCode < 48 || charCode > 57)) {
    return false;
}
return true;

}

これを機能させる方法の例を次に示します

function navigate(up, down) {
            if (event.keyCode == 13 || event.keyCode == 40) document.getElementById(down).focus(); 
            if (event.keyCode == 38) {document.getElementById(up).focus(); document.getElementById(up).select();}
            if (event.keyCode == 39) randomize(); // the randomize() function gives a random number, 
                                                  // irrelevant to navigation

入力ボックスは次のとおりです。

<input type="text" value="55EEFF" id="i_sco" onkeydown="navigate('i_col', 'i_ssi')"></input>

4

2 に答える 2

0

などの関数を変更することcheckchangedecで、必要な機能を取得できます。checkchangehex

HTML:

<input id="dec" onkeypress="return isNumberKey(event);" onkeydown="checkchangedec(event)" value="10">

Javascript:

function checkchangedec(event)
{
var charCode = (event.which) ? event.which : event.keyCode;
if (charCode == 40){
    var input = document.getElementById('hex');
    input.focus();
    input.select();
    return;
}
else if (charCode == 38)
    return; // there isn't an input above Decimal.

setTimeout(
    function () {
        if (id('dec').value !== "") {
            id('hex').value = parseInt(id('dec').value, 10).toString(16);
            id('bin').value = parseInt(id('dec').value, 10).toString(2);
            id('cbi').value = parseInt(id('dec').value, 10).toString(id('cbival').value);
        }
    }, 20);

}
于 2013-05-20T18:36:10.303 に答える