5

jQuery検証を試みています(プラグインなし - 「validate-jsプラグインを使用するだけ」などの回答はしないでください)。

doc ready の「必須フィールド」ごとに、クライアント側のイベント ハンドラーキープレスを配線しています。

$(document).ready(function() {
  $('#myform input.required').each(function() {
    $(this).keypress(onRequiredFieldKeyPress);
  });
});

キーを押すたびにこのイベントを正しく発生させるもの:

function onRequiredFieldKeyPress() {
   if ($(this).val().trim() == '') {
      $(this).next('em').html('*').show(); // show req field indicator
   } else {
      $(this).next('em').html('*').hide(); // hide req field indicator
   }
}

ただし、 $(this).val() は常に null/空です。私が期待する「HTMLInputElement」を渡しているように見えますが、これを他のjQueryタイプに投影する必要があるようです?

基本的に私はこれをやろうとしています:私が配線したフィールド(すべて入力要素)のキープレスイベントで、その関数を呼び出します。その関数では、そのフィールドの値が '' (空) の場合、必須フィールド インジケーターを表示する隠しフィールドを表示します。

私のロジックの動作は同じであるため、どの実際の要素がキープレスを起動したかはあまり気にしません。実際の値を取得する必要があります。

何か不足していますか?

4

2 に答える 2

9

キープレスイベントを使用しているためです。キープレスには3つのフェーズがあります:
1.キーダウン:キーが押されたとき
2.キーホールド:キーが押し下げられたとき
3.キーアップ:キーがリリース
された場合、キーアップイベントを使用して問題を解決できます

$(document).ready(function() {
  $('#myform input.required').each(function() {
    $(this).keyup(onRequiredFieldKeyPress);
  });
});
于 2010-08-09T07:09:17.953 に答える
1

event が関数の最初のパラメーターである event.currentTarget を使用してみてください。

ここを参照してください: http://api.jquery.com/event.currentTarget

于 2010-08-09T07:04:12.100 に答える