1

入力した桁数を数えるためのこのコードがあります

var tnnod=0;
function telephone(e) {
    if (tnnod<10) {
        var key;
        var keychar;

        if (window.event) {
            key = window.event.keyCode;
        }
        else if (e) {
            key = e.which;
        }
        else {
            return true;
        }
        keychar = String.fromCharCode(key);

if ((key==null) || (key==0) || (key==8) ||  (key==9) || (key==13) || (key==27) ) {
   return true;
}
else if ((("0123456789").indexOf(keychar) > -1)) {
    tnnod+=1;
   return true;
}
else if (keychar == "-") { 
  return true;
}
else
   return false;
}
    else
        return false
}

しかし、バックスペースがヒットし、削除された文字が「-」ではなく数字であるたびに、カウンターから1を削除するにはどうすればよいですか。

キー==8を取得して何かを実行しようとしましたが、バックスペースを押しても実際には何も返されません。

何が問題になる可能性がありますか?

4

4 に答える 4

1

そのようなもののキーストロークを数えるのは悪い考えだと思います。テキストフィールドへの入力について話しているのですよね?ユーザーがクリップボードから文字列を貼り付けるとどうなりますか?彼がマウスを使用してテキストにマークを付けて削除した場合はどうなりますか?1文字に置き換えますか?

テキストフィールドからテキストを見て、(必要に応じて)適切な構文を確保するために少し手を加える方がはるかに理にかなっていると思います。ユーザーが好きなように入力できるようにします。ゴミの文字が見つかった場合は、テキストをそれらの文字を含まない文字に置き換えることができます。この時点でフィールドをトリミングすることもできます(先頭または末尾のスペースはありません)。また、長さを正確に追跡することは、フィールドから返された文字列の長さを尋ねるのと同じくらい簡単になります。

于 2010-07-17T20:30:56.067 に答える
1

特にバックスペースのキー押下を検出する必要はありません。これを試して:

var tn_count = 0;
function telephone(ev) {
  var el = document.getElementById("telephone_number");

  if(tn_count < 10) {
    var key, keychar;
    if(window.event) {
      key = window.event.keyCode;
    } else {
      key = ev.which;
    }

    keychar = String.fromCharCode(key);
  }

  if(!keychar.match(/\d|-/)) {  // only allow digits or "-"
    return false;
  }

  // clean up any non-digit chars that get in here somehow
  el.value = el.value.replace(/[A-Za-z]+/, '');
  tn_count = el.value.replace("-",'').length; // get the digit length
  return true;
}

ここでの基本的な違いは、キーが押されるたびに1を加算するのではなくtn_count、フィールド内のすべての数字の合計数になるように更新されることです。安全のために、おそらくもう少しクリーンアップを行うことができますが、これで開始できます。

于 2010-07-17T20:40:13.490 に答える
0

いくつかの考え-

  1. 1つではなく3つのフィールドを使用することは可能でしょうか?その後、ダッシュを追加できます。
  2. 現在の方法を使用する場合は、入力されたダッシュのカウンターを保持することができます。次に、各キーストロークで、ダッシュがいくつ残っているかを確認します。以前のカウントと異なる場合は、ダッシュが削除されていることがわかります。
  3. もう少し頑強にする必要があると思います。文字列内の奇妙な場所にダッシュを置いた場合はどうなりますか?
  4. また、ユーザーがすべての非数字を入力できないようにし、各区切り点にダッシュを挿入することもできます。したがって、入力中に3と6の数字の後にダッシュを挿入します。
于 2010-07-17T20:37:27.367 に答える
0

文字列の長さを数えて、その値を使用できますか?次のようなもの:

function getLen(el) {
    return el.value.replace('-', '').length;
}

alert(getLen(document.getElementById('telephone_number')));
于 2010-07-17T20:50:56.700 に答える