2011-11-14 5 views
0

私はliのクラス 'tab3'を持っています。他の場所にjQueryがあります。その上にマウスカーソルを置くと、 'selected'というクラスが追加されます。その後、トリガークラスがクラスを追加したときにjQueryが何かを行う

<li class='tab3 selected'> 
    <div class='showme'>Show this</div> 
    <div class='addattr'>Add attributes</div> 
</li> 

$('.tab3.selected').each(function() { 
    $('.showme').show(); 
    $('.addattr').attr('style', 'position:relative; display:block'); 
}); 
+0

あなたはホバー機能がどこにあるか見つけて、そこにあなたのコードを追加する必要があります。自分自身をバインドする別のホバー機能を実装する。 –

+0

これは本当に要素に "スタイル"を設定する正しい方法ではありません。 jQueryの ".css()"メソッドを探し、それを使用してください。そのように設定しても機能しない場合があります(一部のブラウザでは)。 – Pointy

+0

jQueryに関する限り、下のPointyがあなたに最高の答えを与えました。しかし、まず、あなた自身の例では、いくつかの欠陥があります:divはすでに表示されています(showmeにはdisplay:noneのCSSがない限り)。 showmeとaddattrの両方にdisplay:noneのCSSがある場合、 li全体が隠されているので、ホバリングは起こりません。そう、ここにはたくさんの違いがあります。最後に、css:ホバーは、それらのような単純なものを処理する最善の方法です。サイドノートには –

答えて

2

あなたはCSSを経由して、これを達成することができます

<style type="text/css"> 
    .tab3 .showme{display:none;} 
    .tab3.selected .showme{display:block;} 
</style> 
+0

私はこのアプローチが好きで、[ここではそれで遊ぶためのフィドルです](http://jsfiddle.net/Nrvfw/) – roselan

3

はそれを行うには、組み込みの方法はありませんが、あなたは常に「クラス・チェンジ」のような「カスタム」イベントのイベントハンドラを登録することができ、そして:私はこの問題が発生したときに何かをしたいですこれは、要素のクラスを更新するたびに発生します。 (あなたも、それを行うために、「addClass」機能を再定義することができます。)あなたもクラスを追加/削除する場合@Brad Wedellの答えで述べたように、外見が変化するために、昔ながらのCSSルールを使用することを検討すべきである。もちろん、

$('whatever').addClass('selected').trigger('class-change'); 

// ... 

$('.tab3').bind('class-change', function() { 
    $('.tab3.selected').each(function() { 
    $('.showme').show(); 
    $('.addattr').attr('style', 'position:relative; display:block'); 
    }); 
}); 

+0

ハァッ?なぜホバーバインドで直接変更を呼び出さないのですか?彼が選択されたクラスを追加するホバーバインディング関数にアクセスできない場合、私は彼がaddClass()のクラス変更を引き起こすことはできません。 – roselan

+0

イベントをトリガするだけで、クラスを変更するコードは、他のコードの詳細を知る必要はありません。これはデカップリング技術です。 "addClass()"で "class-change"イベントをトリガーするには、 "addClass()"をラッパーに置き換える必要があります。 – Pointy

+0

はい、それでもなお、主なアイデアは残っています。 hoverをバインドしてaddClassを実行する関数にアクセスできない場合、彼はカスタムイベントをトリガーできません。もしアクセスがあれば、もちろんこれはエレガントな方法です;) – roselan

関連する問題