2010-11-27 14 views
0

jQueryでチェックボックスのclickイベントのチェックボックスのラベルにクラスを追加しようとしています。私はajax呼び出しでチェックボックスのHTMLを取得した後、次の関数を呼び出しています。JQueryでラベルにクラスを追加する

function modDispTable() { 
    $("#disptbl :input").each(function() { 
     $(this).click(function() { 
      var lblid = $(this).attr("id") + "_lbl"; 

      if ($(this).is(":checked")) { 
       $(lblid).addClass('chksel'); 
      } 
      else { 
       $(lblid).removeClass('chksel'); 
      } 
     }); 
    }); 
} 

は、以上のチェックボックスがありますが、チェックボックスのすべての結果のHTMLは次のようになります。

<label id="chk_sobomnifeat_lbl" name="chk_sobomnifeat_lbl" for="chk_sobomnifeat" class="radiolbl chkmod chkmod1"> 
<input id="chk_sobomnifeat" name="chk_sobomnifeat" value="chk" type="checkbox"> 
Sobella Omni Feature Display 
</label> 

今、私がやろうとしていますそのすべてが異なる背景色を適用しています。 CSSはページに含まれているファイル内にあります。

.chksel { 
    background-color: #D3CEBE; 
} 

私は間違いをしておりません。 Firebugでのデバッグでは、クリックイベントが発生したときに私はさらに困惑しました。lblidには正しいid値(ラベルの)が含まれており、addClass行が実行されたと思われます。

授業が適用されない理由はありますか?私はJQuery 1.4.4を使用しています。

答えて

5

ID文字列に#がありません。 (すでに適切なマークアップを使用しているので)ことwoud

var lblid = "#" + $(this).attr("id") + "_lbl"; 

しかし、たとえクーラー:あなたは、おそらくのようなIDセレクタを必要とする

var lblid = "#" + $(this).attr("id") + "_lbl";

+0

私はこの小さなfacepalmの瞬間を指摘する必要がありました...ありがとうございました! – Buggabill

3

var label = $("[for=" + $(this).attr("id") + "]"); 
+0

面白い...私のスクリプトに 'label'をどのように使うのですか?私はあなたがここで行っていることを逃しているかもしれません。 'label'を割り当てた後、' label.addClass( "chksel"); 'のようなことをしますか? – Buggabill

+0

私は少しの調査をして、あなたがここで何をしようとしているのかを考え出しました。私はそれを絶対に愛しました!それは私の特定の状況のコードの束をカット。私はこれをガイドとして使用しました - http://stackoverflow.com/questions/285522/find-html-label-associated-with-a-given-input/285565#285565本当にありがとう!それは方法クーラーだった! – Buggabill

+1

あなたはそれを理解してうれしいです。その解決策についてのきちんとしたことは、不要なIDの束を必要としないということです。 labelをjQueryオブジェクトとして使用し、それを$(label)にラップすることもできます(jQueryオブジェクトのjQueryオブジェクトを使用してそのオブジェクトが返されます)。 – Daff

1

は "追加してみてください# ":

var lblid = "#" + $(this).attr("id") + "_lbl"; 
1

セレクタを$('#'+lblid)に変更

関連する問題