1

ログイン/登録ページを Ajax/jQuery を使用するように変換しています。そのため、2 つのフォーム間には多くの共通の検証機能があります。私が jQuery を使用している領域の 1 つは、入力に基づいてエラー メッセージをユーザーに出力することです。フォームは同様の要素 ID を共有していますが、クラス名は異なります。

ユーザー名を確認するために、私は持っています

if ($(":input").is('.registerName')){
   //Username belongs to the registration form, so check if current entry is 
   //valid and not taken.  Output error message otherwise

}  else {
   //username belongs to the login form, so check if current entry exists in database
   //output username/password error depending on catch
}

私はいくつかの奇妙な出来事を経験しました。

まず、上記のコードは a を返しますg.nodeName is undefined error。初期条件を次のように変更すると

if ($("input#username").is('.registerName'))

同じエラーが Firebug に表示されます。

でも、

if ($("#username").is('.registerName'))

if ($("#username").hasClass('registerName))

どちらも失敗し、ログイン検証セクションが実行されます。

では、g.nodeName 未定義エラーなしで、クラス名に基づいて実行する正しいコード ブロックを取得するにはどうすればよいでしょうか?

編集

明確にするために、同じページに 2 つのフォームはありません。コード機能は JavaScript にあります。同じ JS 関数を呼び出す異なるページ上の 2 つの別個の HTML フォームについて言及していますが、唯一の違いはエラー メッセージ出力のテキストです。

編集2

JFiddle の例:ここ

テキスト ボックス onclear はフィドルでは機能しませんが、私がやろうとしていることの要点を理解できると思います。

4

1 に答える 1

1

発生した問題を正確に再現することはできませんが、試してみてください

if ($(this).is('.registerName'))

代わりは。keyupそうすれば、イベントが発生した特定の要素のみを見ていることがわかります。ページ上のすべての入力$(':input')を探します。

于 2012-06-13T21:57:58.800 に答える