2010-12-17 12 views
4

スタイルを変更するonClickイベントがあります。ユーザーがアイテムの他の場所をクリックしたときにスタイルを元に戻す方法は?他の場所のクリックイベントですか?

プロトタイプライブラリとスクリプトライブラリの両方が含まれています。以下の回答の多くは、それらのものでは機能しません...要素のIDもUNDEFINEDなので、javascriptでは参照できません。

おかげで、ヤン

+0

変更されることを確認します。 – RPM1984

答えて

3

私が持っていますすべてのブラウザでこれをテストしていますが、任意の新しいJSフレームワークを導入したくない場合は、このソリューションは、CSSは使用しない:

<ul> 
    <li tabindex="1">First</li> 
    <li tabindex="2">Second</li> 
</ul> 

をプロパティのtabIndexはFO li要素になりますcusable。そして、CSS:

li { color: #F00; } 
li:focus { color: #0F0 } 

これはもちろん、非常に基本的なスタイリングです、おそらくクラスやそれに入れたいと思っています。

+0

いい答えですが、IE8以降でのみサポートされています。 – Paddy

+0

ああ、お会いできてよかったです。 Chromeでのみ自分でテストしました。 – DanneManne

0

私はjQueryのライブイベントを使用してアイテムをその上でクリックされたとき:not selector

+0

既にプロトタイプを使っています...物事を混乱させたくない... – Yan

2

を使用してイベントをクリックして結合するであろう、それがフォーカスを取得。何か他のものがクリックされるとonblurイベントを引き起こし、フォーカスを失います。すべての要素で機能しないかもしれませんが、例えば<input>要素の場合はうまくいくでしょう。

+0

"li"要素ではdo not't:http://jsbin.com/ojohe5/ – Yan

2

大きな質問!

if (event.target === myElement) { 
    changeStyle(); 
} else { 
    changeStyleBack(); 
} 
:あなたの代わりにあなたの要素のonclickイベントで、あなたが高いオブジェクトのイベントハンドラを定義することを意味し、「イベントはバブリング」を使用することができます(たとえば、 documentまたは table)、そしてそこには、あなたが何かのように言います

よりここに(および他の場所):http://www.southsearepublic.org/tag/Javascript%20Event%20Bubbling/read

1

あなたはonblurイベントをしたい:「オブジェクトがフォーカスを失ったときにonBlurイベントが発生します」。

+0

"li"要素では機能しません: http://jsbin.com/ojohe5/ – Yan

+0

私はそれが最善の解決策だと言っているわけではありませんが、li要素にtabIndexを設定すると、フォーカスが当てられます。 – DanneManne

0

タグ内にonclick="function1()" onblur="function2()"またはonfocus="function1()" onblur="function2()"と表示されている可能性があります。ここで

+0

onblurは動作しません... – Yan

+0

まだありません:http://jsbin.com/ojohe5/ – Yan

0

あなたはjQueryのでそれを行うことができる方法です:

$(document).click(function(e) { 
    if ($(e.target).is("#specialItem")) { 
    $(e.target).addClass("specialClass"); 
    } else { 
    $(#specialItem").removeClass("specialClass"); 
    } 
}); 

あなたはjQueryのを使用していない場合でも、基本的なモデルを使用することができます - ドキュメントレベルでonclickイベント・ロジックを適用します。これは、ぼかしイベントに応答しないアイテムに対して機能します。

+0

これは特定のIDにバインドされますか?私は動的リストを持っているので、Idを知らないでください – Yan

+0

まあ、#specialItemをコードに必要なものに変更します。 –

1

bodyでonClickイベントをバインドし、そのイベントにスタイルを復元する関数を割り当てることができます。

あり私が試作品を使用していたので、かなり長い時間がかかったhttp://jsbin.com/oxobi3

+0

hrefがない場合はどうなりますか? http://jsbin.com/oxobi3/2/ – Yan

+0

私はいくつか変更を加えました。 http://jsbin.com/oxobi3/3 – Kevin

+0

実際にjsbin.com/oxobi3/2では、セレクタを「a.link」から「li.link」に変更し、幅の値を 'li'に設定するだけです'body'をクリック可能にするためです。 – Kevin

0

でのライブの例ですが、私はこれがあなたの役に立てば幸い(非jQueryの意味で。)

$(window).observe('click', respondToClick); 

function respondToClick(event) { 
var element = event.element(); 
if(!($(this) == element)){ 
    element.addClassName('active');//or do your stuff here 
} 


} 
0

私のアプローチ

var elsewhere = 1; 
$(myelement).bind('hoverin',function(){ 
    elsewhere = 0; 
}); 
$(myelement).bind('hoverout',function(){ 
    elsewhere = 1; 
}); 

$('screenarea').click(function(){ 
    if(elsewhere){ 
     change-style-back(); 
    } else{ 
     change-style(); 
    } 
}); 

これは、画面上のどこかをクリックし、そのないあなたの要素にする場合、そのスタイルはjQueryのトグルを使用してバック

関連する問題