2010-12-15 10 views
1

私はここで間違っていたのだろうかと思っていました。最初の関数は、リセットボタンが呼び出されたときに正常に動作しますが、何らかの理由で2番目の関数が何もしていません。フォームはリセットされますが、2番目の警告はポップアップせず、警告クラスは決して削除されません。ご協力いただきありがとうございます!jQuery。各機能のヘルプ

$('#registration :reset').click(function() { 
    alert("reset was clicked"); 
    $('#registration :text').each(function() { 
     if ($(this).hasclass('warn')) { 
      $(this).removeClass('warn'); 
     } 

     if (!$(this).hasclass('texta')) { 
      $(this).addClass('texta'); 
     } 

     alert("value"); 
    }); 
}); 
+3

これはおそらく問題を解決しませんが、それを '$( '#registration:text')に短縮することができます。removeClass( 'warn')。addClass( 'texta');'。 – deceze

+0

あなたは、全体的なコードがちょうど最初に動作すると言っている、あるいは.each()メソッドがうまく動作しないと言っていますか? – yoda

+0

実際に問題を解決するかもしれないので、私はこれを答えとして追加しました。:) – deceze

答えて

5

..私はあなたが削除すると、彼らがバインドさ国連なっていると思う、ライブ使用する

を試してみてください。 hasclass()メソッドは存在しませんが、hasClass()があります。あなたは書く必要があります:

$('#registration :text').each(function() { 
    if ($(this).hasClass('warn')) { 
     $(this).removeClass('warn'); 
    } 

    if (!$(this).hasClass('texta')) { 
     $(this).addClass('texta'); 
    } 

    alert("value"); 
}); 
あなたは通常の要素が既に指定したクラスを持っている場合 addClass()は重複を追加しませんので、 addClass()または removeClass()hasClass()を呼び出す必要はありません、と述べ

、およびremoveClass()ウォン」を要素にはないクラスを削除しないでください。だから、簡単に書くことができます。

$('#registration :text').each(function() { 
    $(this).removeClass('warn'); 
    $(this).addClass('texta'); 
    alert("value"); 
}); 

あるいは、@decezeのように連鎖する方法を使用して処理が行われます。

$('#registration :text').each(function() { 
    $(this).removeClass('warn').addClass('texta'); 
    alert("value"); 
}); 
+0

+1に基づいてコードを変更しました。 – deceze

1

彼らは追加や削除得ているとJavaScript言語がcase-sensitiveある

$('#registration :reset').live('click', function() { 
    alert("reset was clicked"); 
    $('#registration :text').each(function() { 
     if ($(this).hasClass('warn')) { 
      $(this).removeClass('warn'); 
     } 

     if (!$(this).hasClass('texta')) { 
      $(this).addClass('texta'); 
     } 

     alert("value"); 
    }); 
}); 
+0

私はhamidiの提案/// – kobe

4

は、代わりにこれを試してみてください:jQueryのの

$('#registration :text').removeClass('warn').addClass('texta'); 

見よぜマジック!

ほとんどすべてのjQueryメソッドはで動作し、$ファンクションによって返されます。したがって、すべての結果をループする必要はありません。removeClassaddClassは、#registration :textセレクタによって検出されるすべての要素に適用されます。さらに、クラスを削除または追加する前に、チェックする必要はありません。クラスを追加していて、そのクラスにすでにクラスがある場合は何も起こりません。逆にクラスを削除する。

a tutorialを読んでみてください。これがjQueryを強力にする理由です。

+0

が質問に誤って回答しました:) – yoda

+0

これはどのように機能しますか教えてください。私はそれがいかに簡単か、私はただ知りたいと思っています。 – Samuel

+0

@サミュエルこれはjquery chainingと呼ばれ、パフォーマンスにも優れています// – kobe