2012-08-15 7 views
5

http://jsfiddle.net/C8B8g/7/ 2つのボタン(= 2div)「リージョン」と「ソース」があります。各divは、マウスオーバーで強調表示されます(青い背景)(stackoverflowの貢献者のおかげで、私はまだJSで非常に悪いです)。他のDIVがクリックされたときにDIVの色を変更してください

私はユーザーが実際にボタンであることを認識していないことに気がつきました。私がしたいのは、最初のDIVに「私たちの地域」というテキストが含まれ、青い背景で強調表示され、 "our source"というテキストを含む他のdivがクリックされたとき(この場合、 "ソース"の背景が青色に変わります)、白の背景に戻ります。

答えて

6

はこれを試してみてください... "現在の" CSSではなく、成功せずに使用していくつかのテストをした: 更新: Here is working jsFiddle.

$('.activity-title a:first').css({'background-color':'#f00','color':'#fff'}); 
//for setting first button highlighted by default, 
//don't forgot to define document.ready before this 

$('.activity-title a').click(function() { 
    var region = $(this).attr('data-region'); 

    $('.activity-title a').css({'background-color':'#fff','color':'#467FD9'}); 
    $(this).css({'background-color':'#f00','color':'#fff'}); 

    $('.textzone:visible').stop().fadeOut(500, function() { 
    //don't forgot to add stop() for preventing repeat click conflict 
     $('#' + region).fadeIn(500); 
    }); 

    return false; 

});​ 
+0

を入力してください。 –

+0

ありがとう - それは素晴らしい動作します!最初のボタンをデフォルトでハイライト表示する方法はありますか? (右側のテキストゾーンが表示されているので、各ボタンがテキストゾーンに関連付けられていることを人々が理解するのに役立ちます) – Greg

+0

@Greg私の回答メイトを更新しました。これらのcss値をクラスまたはIDに割り当て、removeClass/addClassメソッドを使用していましたが、jQueryを使用してCSSを変更する方法を尋ねられました。 –

1
try with this exemple: 
<div id="target"> 
Test1 
</div> 
<div id="other"> 
    Test2 
</div> 

<script> 
$("#target").click(function() { 
    $('#target').css({'background':'blue'}); 
$('#other').css({'background':'white'}); 
}); 

$("#other").click(function() { 
    $('#other').css({'background':'blue'}); 
    $('#target').css({'background':'white'}); 
}); 
</script> 
5

は、選択したdivの

.source-selected { 
    background-color:#00F; 
} 

追加のスタイルを追加します。このクラスをデフォルトのdivに設定します。

更新フィドル試してみてください(更新)あなたのクリックハンドラに

if(!$(this).closest('.source-title-box').hasClass('source-selected')) 
{ 
    $('.source-title-box').toggleClass('source-selected'); 
} 

をこの行を追加します。あなたのコードのいくつかの部分があったとして、私は答えを投稿することを決め

http://jsfiddle.net/dmvcQ/1

+1

私はインラインCSSを避ける​​ので、あなたのアプローチがより好きです。ただしこれはクラスを交互に適用します。クリックするリンクは重要ではありません。追加したものの前に別の行を追加する必要があります。 '$( '。source-selected')。toggleClass( 'source-selected');' – Jeemusu

+0

あなたはおそらくあなたのコードがそれらのすべてを選択するので、最も近い( '。source-title-box')。 – Jeemusu

+0

あなたは正しいです、私は速くしようとしていました;)私はあなたのコメントに応じてフィドルを修正し、答えを更新しました。ありがとう。 –

3

[OK]を私が取り組んでいたことです。

まず、return false;を最後に実行する代わりに、jQuery event.preventDefault();関数を使用できます。最終的な結果は基本的に同じですが、このようにして、他のコードを実行する前に、アンカーに何もしないようにjQueryを使用することができます。

私の更新Javascriptコード:

$('.source-title-box a').click(function(event) { 

    // Stop the default anchor behaviour 
    event.preventDefault(); 

    // Lets check if the clicked link is already active 
    // And if it is active, don't let them click it! 
    if($(this).closest('div').hasClass('active')) { 
     return false; 
    } 

    // Now lets remove any active classes that exist 
    $('.active').toggleClass('active'); 

    // And apply an active class to the clicked buttons 
    // parent div 
    $(this).closest('div').toggleClass('active'); 

    var region = $(this).attr('data-region'); 

    $('.textzone:visible').fadeOut(500, function() { 
     $('#' + region).fadeIn(500); 
    }); 
});​ 

CSS私が追加:

.active { 
    background-color:#467FD9; 
    color:#fff; 

} 
.active a { 
    cursor:default; /* Don't show the hand cursor */ 
    color:#fff; 
} 

Aワーキング例:

http://jsfiddle.net/dmvcQ/3/

を現在のHTML場合、私はわからないんだけどマークアップには他の目的もいくつかありますが、現在のスタイルと機能性<a href="#" data-region="source-region">Our region</a><div><span>にラップする必要はありません。ここで例えば

はちょうどアンカータグで、同じコードです:http://jsfiddle.net/dmvcQ/7/

は、あなたが答えについて質問があるなら、私に教えてください。

+1

答えてくれてありがとうJeemusu!実際の環境で何らかの理由で(ここで「ソース」をクリックするとhttp://goo.gl/fOHGN)、最初の「ボタン」はデフォルトでjsfiddleのように強調表示されません。理由を知っていますか? Thanks – Greg

+1

デフォルトで選択されているように表示されるhtml要素にアクティブなクラスを追加しましたか?どのように私はそれを設定した参照してください私のJsのフィドルをチェックしてください。 – Jeemusu

+0

おっと、私はそれを逃しました - それは今、あなたの助けてくれてありがとう! – Greg

1

それとも、それを主にjqueryの

実施例を行うことができます。これは、改善された答えをdownvotedされている理由

http://jsfiddle.net/razmig/GhbjS/

$('.activity-title a:first').css({ 
    "background-color": "#467FD9", 
    "color": "#fff" 
}); 


$('.activity-title a').mouseover(function() { 
    $('.activity-title a').css({ 
     "background-color": "#fff", 
     "color": "#467FD9" 
    }); 
    $(this).css({ 
     "background-color": "#467FD9", 
     "color": "#fff" 
    }); 

}); 

$('.activity-title a').click(function() { 
    var region = $(this).attr('data-region'); 

    $('.textzone:visible').fadeOut(2000, function() { 
     $('#' + region).fadeIn(2000); 
    }); 

    return false; 

}); 
+0

あなたの答えと実際の例に感謝します。 href = "#"のhtmlを変更したことに気付きました。残念ながら私の場合(セクションごとに1つのdivを持つ1ページのレイアウト)は動作しません(ボタンをクリックするとページが上にスクロールされます)。 – Greg

+1

href = "javascript:void(0)"またはjquery u event.preventDefault()を使用できます。 – Razmig

関連する問題