1

カーソルがテキストボックスにフォーカスされているときに関数Xが何かを実行していて、Enterキーを押していますが、このテキストボックスにフォーカスすると、アラートが表示される可能性があります(他のJS関数を使用)。

ここで問題が発生しますenter。アラートが発生したときにこの関数Xを呼び出さないようにするために、を押してエラーを「無視」することがありますが、アラートが再び閉じられたときに再び機能させたいと考えています。

HTMLページ:

<input type='text' name='col0' id='col0' onkeyup='arrowHandler(0);'
onblur='count(0)' />
<input type='text' name='col1' id='col1' onkeyup='arrowHandler(1);' 
onblur='count(1)' />
<input type='text' name='col2' id='col2' onkeyup='arrowHandler(2);' 
onblur='count(2)' />
<input type='text' name='col3' id='col3' onkeyup='arrowHandler(3);' 
onblur='count(3)' />

JSページ:

function arrowHandler(i){
  var key = window.event.keyCode;
  if(key == 13){
    // moving to the next (or first, if last) text field
    var newcol = parseInt(i) + 1;
    if(newcol == col) newcol = 0;
    elmt = document.getElementById("col" + newcol);
    elmt.focus();
  }
}

function count(i){
  if(parseInt(document.getElementById("col" + i).value) > 20){
    alert("error!");
  }
}

ここで、フォーカスが入っているとき、col025と書くと、フォーカスがに移動しcol1、アラートが表示され、Enterキーを押すと、フォーカスがに移動しますcol2(Enterキーを押すため、最後の移動は必要ありません)アラートが表示されたとき)。

4

5 に答える 5

1

次のようなものを試すことができます:

var block = false;

function arrowHandler(evt, i){
  var key = window.event.keyCode;
  if(!block && key == 13){
    // moving to the next (or first, if last) text field
    var newcol = parseInt(i) + 1;
    if(newcol == col) newcol = 0;
    elmt = document.getElementById("col" + newcol);
    elmt.focus();
  }
}

function count(i){
  if(parseInt(document.getElementById("col" + i)).value > 20){
    block = true;
    alert("error!");
    setTimeout(function(){block=false;},100);
  }
}

これは、alertJS の実行を停止するため、アラートの直後にキーを押しても無視されます。

おそらく の使用を再考する必要がalertありますが、検証を行うためのより良い方法があります。

于 2012-05-04T06:10:22.353 に答える
0

これがより単純なバージョンです。フォーカスの処理は別の関数で行われます。タイマーなどは必要ありません。お役に立てれば。

そして、他の人が言っているように、アラートの使用は避けてください。そのようなものを見つけた場合、それは本当に苛立たしいことではありませんか?考えてみてください。

var handleFocus = function (i, error) {
    var id = "col" + (error ? i : ++i);
    if (id === 'col' + col) id = 'col0';
    alert(id + "  " + i + "  " + error)
    document.getElementById(id).focus();
};

var arrowHandler = function (evt, i) {
    var key = window.event.keyCode;
    if (key == 13) {
        handleFocus(i, false);
    }
};

var count = function (i) {
    if (parseInt(document.getElementById("col" + i).value) > 20) {
        alert("error!");
        handleFocus(i, true);
    }
};
于 2012-05-05T16:01:22.347 に答える
0

理想的には、使用せずに、フォーカスを取得alert()するスタイルを適切にポップアップするか、ユーザーに確認を強制せずに失敗メッセージを示すを表示します。<div><span>

解決策に固執することを選択した場合alert()、@ gopi1410は正しいです。前に変数を設定し、その後にクリアすると、「キーストロークをフィルタリングしない」ことを意味します。

于 2012-05-03T23:22:40.613 に答える
0

これを試してください、うまくいくはずです:

グローバル一時変数を使用して、「エラー!」を警告するときに t & を 1 に設定することができます。次に、arrowHandler 関数で if 条件を if(key==13 && t==0) に変更し、その後にコードを記述して、t=0 を変更する箇所に else 部分を追加します。

parseInt(document.getElementById("col" + i))>20また、あなたのステートメントは に置き換える必要があると思いますparseInt(document.getElementById("col" + i).value)>20

于 2012-04-24T18:56:35.033 に答える
0

uは、if(key == 13)条件内のarrowHandler内でcount関数を使用し、count関数にreturn falseを追加できます

(時間があるときに回答を改善します)

于 2012-05-07T10:23:00.790 に答える