0

スクリーン キーボードと 5 つの入力ボックスがあります。私の問題は、入力ボックスに焦点を合わせて何かを入力しても何も起こらないことです。入力ボックスにフォーカスするたびに入力を追加したい。

これが私の簡単なコードです。このコードは、1 つの入力フィールドに対してのみ機能します。これを 5 つまたは 4 つの入力フィールドで機能させたいと考えています。

function writeKey(key){
  if(key){
    if(key == "Enter"){
      key = "10";
     } else if(key == "tab"){
      document.getElementById("feld1").value += "\t ";
    } else if(key=="backspace"){
      document.getElementById("feld1").value=document.getElementById("feld1").value.slice(0,-1);
    } else if(key==" "){
      document.getElementById("feld1").value += " ";
    } else {
      document.getElementById("feld1").value += String.fromCharCode(key);
    }
  }
}
4

2 に答える 2

2

現在フォーカスされている要素を指すdocument.activeElementを見てください。

それを使用して、次のようにコードを書き換えることができます。

function writeKey(key){
  var el = document.activeElement;
  if(key){
    if(key == "Enter"){
      key = "10";
     } else if(key == "tab"){
      el.value += "\t ";
    } else if(key=="backspace"){
      el.value = el.value.slice(0,-1);
    } else if(key==" "){
      el.value += " ";
    } else {
      el.value += String.fromCharCode(key);
    }
  }
}

デモはこちら

onclickではなくonmousedownでwriteKeyを実行する必要があることに注意してください。そうしないと、フォーカスは既に入力から移動されます。デモはそれを反映しています。

そのhtmlコードは次のとおりです。

<div onmousedown="writeKey('a');return false">Click key</div>
<input type="text" />
<input type="text" />
<input type="text" />

また、return false;writeKey が呼び出された後を見てください。これにより、デフォルトのブラウザのアクションが妨げられ、キーをクリックしても入力からフォーカスが失われなくなります。これがないと、キーを押すたびに要素にフォーカスを設定する必要があります。

于 2013-01-11T09:15:13.077 に答える
1

実際にメソッドを呼び出す方法がわかりませんwriteKey。次のようにコードを書き直すことができます。

function writeKey(key, fieldId){
  if(key){
    if(key == "Enter"){
      key = "10";
     } else if(key == "tab"){
      document.getElementById(fieldId).value += "\t ";
    } else if(key=="backspace"){
      document.getElementById(fieldId).value =
          document.getElementById(fieldId).value.slice(0,-1);
    } else if(key==" "){
      document.getElementById(fieldId).value += " ";
    } else {
      document.getElementById(fieldId).value += String.fromCharCode(key);
    }
  }
}

または、フィールド自体を渡すこともできます。

function writeKey(key, field) {
    ...
    field.value += "\t";
    ...
}
于 2013-01-11T09:13:12.727 に答える