0

ajaxフォーム送信にjQuery検証を使用しており、テキスト入力のいずれかにクラス「error」がある場合は、errorContainerにクラスを追加したいと思います。単純に見えますが、スコープの問題だと思いますか?

if ($('#myInput').hasClass('error')) { 
  $('#errorContainer').addClass('foo'); 
}

私はこれを送信ハンドラーの外側、送信ハンドラーの内側、検証呼び出しの外側、検証呼び出しの内側に配置しました...すべて無駄になります。誰かがこの単純なタスクを成功させましたか?

4

3 に答える 3

2

あなたはこれを行うことができます:

if ($('input[type=text].error').length > 0) { 
  $('#errorContainer').addClass('foo'); 
}

$('input[type=text].error')一致するものが1つしかない場合でも、セレクターは配列のようなオブジェクトを返します。したがって、配列hasClass('error')に意味がないかどうかを尋ねます。

本当にやりたいのは、エラークラスをチェックしたい要素の周りにコンテナを配置することです。フォームのようなコンテナがすでにある場合があります(フォームのすべての入力である場合)。次に、次のようなことを行うことができます。

<form id="myForm">
  <input type="text" name="a" />
  <textarea name="b"></textarea>
  <input type="submit" value="Submit" />
</form>

JavaScriptの場合:

$(':input.error', '#myForm').length > 0

これがjsfiddleの例です。:inputセレクターを使用すると、必要な入力タイプよりも多くの入力タイプが input得られることに注意してください。

于 2012-12-07T16:32:38.363 に答える
1

値を返すほとんどの関数(.val()、など)は、jQueryオブジェクト内に含まれる選択された要素のグループの最初の.hasClass()要素にのみ作用します。

通常、これらの場合、実行する必要があるのは、関数を使用してすべて.each()の要素を反復処理し、各要素に対してテストを実行することです。

ただし、クラスをテストしているため、Cymenの回答で詳しく説明されているように条件を変更できます。

于 2012-12-07T16:32:49.407 に答える
1

あなたはただtoggleClassを使用して、条件を渡すことができます

$('#errorContainer').toggleClass('foo',$('input[type=text].error').length > 0);

したがって、クラスエラーのあるものがある場合は、クラスfooを追加します。それ以外の場合は、クラスfooを削除します。

于 2012-12-07T16:33:04.303 に答える