2009-09-22 19 views
2

CSSクラスをに追加するクリック機能をアタッチしようとしています。特定のdiv内にアンカータグがすべてです。どういうわけか私はjQueryにこれをさせることができません(JSエラーもありません)。jQueryセレクタの問題

DIV:

<div id="better"> 
    <a href="1.aspx">One</a> 
    <a href="2.aspx">Two</a> 
    <a href="3.aspx">Three</a> 
</div> 

私のjQueryのコード($(ドキュメント).readyの内側):

$("#better > a").click(function() { $(this).addClass('active'); }); 

私はどうかを確認するために私のクリック機能にアラートを追加それは始動するが、何も起こらない。上に書いたように、FFエラーコンソールでもJavaScriptエラーは発生しません。

ヘルプ?

編集:これは単なるコード例です。はい、リダイレクト時にクラスを変更するのは意味がありません。私は自分のコードを私がやろうとしていることの中核に単純化しました。 :)

答えて

3
$("#better a").bind('click', function() { $(this).addClass('active'); }); 
+1

私には意味がありません。上記がうまくいかない場合。アンカーが選択されたのは変更のみです**直系の子孫ではなく、子孫です。 **クリック**は、** bind( 'click'、func)**の略語です。** jQueryのソースコードを見れば**です。 –

+0

これは、不要なアンカータグにclickイベントを付加すると予期しない問題が発生する可能性があります。あなたのマークアップの残りの部分が分からない場合、クリックイベントが必要ない他のアンカータグが "より良い"ものでないことを確認してください。 –

+0

これはうまくいきました。なぜ、またはその違いが何であるか分かりません。 – Alex

0

私のために働きかけます。しかし、新しいページにリダイレクトする場合は、なぜクラスを追加しますか?

+0

リダイレクト後、クラスは問題になりません。あなたがリンクに従うことを嫌うなら、試してください:falseを返す; –

0

つの推測:

  1. あなたは多分id="better"で、ページ上の他の要素を持っていますか? IDはグローバルにユニークであると考えられているため、セレクタはそのうちの1つだけを返します。

  2. クリック機能をfalseに戻して、ユーザーがリンクをたどらないようにしてください。 (多分リンクは新しいウィンドウで開きますしない限り、ユーザーがページを残しているときに、クラスを追加するために奇妙なようだ。)

0

は終了bodyタグの前にページの右側の一番下にあるコードを実行してみてくださいまたは$(document).ready()関数の中にあります。

Firebugを使用すると、console.log()を使用してjavascriptコンソールに書き出し、セレクタが実際に要素を戻していることを確認できます。例:console.log($( "#better> a")。length)

1

あなたが尋ねていることを理解していれば、これで終わりたいのですか?

<div id="better"> 
    <a href="1.aspx" class="active">One</a> 
    <a href="2.aspx" class="active">Two</a> 
    <a href="3.aspx" class="active">Three</a> 
</div> 

その部門のリンクがクリックされた場合は、右クリックしてください。 (あなたはすべてのアンカータグと言っていました)...

$("#better").click(function() { 
$(this).find('a').addClass('active'); 
return false; 
});