2010-11-30 4 views
3

「デフォルト」ボタンのスタイルを復元し、することができ、それを介してユーザマウスを置いたが、私はいくつかのスタイルを変更するとき - 例えば:マウスがボタンの葉は、どのように私は、保存ボタンを持っている

$('.saveButton').mouseover(function() { 
    $(this).css("background-color", "red"); 
    $(this).parents('fieldset').css("border", "2px solid red"); 
}); 

、Iオリジナルを復元したいと思います:

しかし
$('.saveButton').mouseout(function() { 
    $(this).css("background-color", "#EEE"); 
    $(this).parents('fieldset').css("border", "1px solid gray"); 
}); 

、デフォルトボタンの背景色は、このコードが実行されると、ボタンはその丸みを帯びた外観を失い、直角の角を持って、#EEEであるかどうかの問題を脇に残して。

これは可能ですか?それからちょうど親フィールドセットに削除/このクラスを追加

/* in style.css */ 
.over { 
    border: 2px solid red; 
} 
.over .saveButton { 
    background-color: red; 
} 

答えて

7

私が直接プロパティを設定しないことをお勧めが、代わりにクラス/クラスを設定します:

$('.saveButton').mouseover(function() { 
    $(this).addClass('highlight'); 
    $(this).parents('fieldset').addClass('highlight'); 
}).mouseout(function() { 
    $(this).removeClass('highlight'); 
    $(this).parents('fieldset').removeClass('highlight'); 
}); 

.saveButton.highlight { /* Double class selector is broken in IE6 */ 
    background-color: red; 
} 

fieldset.highlight { 
    border: 1px solid red; 
} 

では、何らかの理由であなたがそれを行うにはしたくない場合は、プロパティを特定の値に設定するのではなく、空の文字列に設定します。それは、そのプロパティを「削除」する必要があります

$('.saveButton').mouseout(function() { 
    $(this).css("background-color", ""); 
    $(this).parents('fieldset').css("border", ""); 
}); 
+0

これはもっとうまくいく方法です。それでもボタンの背景色を設定するのがなぜ国境を越えてしまうのでしょうか? – chris

+0

IEとは実際には関係ありませんが、一般的には 'input'要素があります。ブラウザは通常、オペレーティングシステムがそのネイティブスタイルを使用して 'input'要素をレンダリングすることを可能にします。しかし、これらのネイティブスタイルは、CSSが提供するすべての機能をサポートしていないため、「サポートされていない」スタイルが使用されている場合(この場合Windowsには異なる色のボタンがありません)、ブラウザは、通常は異なる/簡単です。 – RoToRa

+1

これは最適化が必要です。 '$(this) 'を過度に呼び出すと、アプリケーションが遅くなります。 '$(this)).css(" background-color "、" background-color "、および" "").parents( 'fieldset')。css( "border"、 ""); ' – Stephen

4

はい、クラスといくつかのCSSを使用し

$('.saveButton').mouseover(function() { 
    $(this).parents('fieldset').addClass('over'); 
}).mouseout(function() { 
    $(this).parents('fieldset').removeClass('over'); 
}); 

クラスを削除するボタンやフィールドの状態を元に戻すします彼らはその前でした。良いプラクティスとして


- それはそのように管理することがはるかに簡単だ - CSSで(物事がどのように見えるか)、プレゼンテーションを維持し、それらを切り替えるためにJavaScriptを使用することをお勧めします。

+0

(Actaully I ...は、純粋なCSSのソリューションを受け入れるように私の問題のモデルを変更するだろうが、私は話を戻そう)。 +1。しかし、jQueryは '.toggleClass'を使ってより最適化された' .hover'メソッドを提供しています:http://api.jquery.com/hover/ – Stephen

0

あなたの最高のベッドは、マウスオーバーで追加するスタイルのCSSクラスを作成し、 "addClass"を使用してjQueryで追加することです。次に、 "removeClass"を使って一時的なスタイルを削除するだけです。

0

はい、あなたは赤で、BG色と境界線の色を作るのMouseEnterためのクラスを設定することができます。

イベントに対してtoggleClassを使用すると、イベントを切り替えてクラスを追加および削除し、常にデフォルトのボタンに戻すことができます。

2

これは、CSS :hover疑似クラスにはるかに適しています。そして、はるかに速くjavascriptよりも。

.fieldset-class:hover { border: 2px solid red;} 
.saveButton:hover { background-color:red;} 

mouseover/mouseoutイベントでCSSを変更するだけでよい場合は、この方法を使用してください。

実際には:hoverlive example from Soh Tanakaです。バーのポップアップツールチップ?純粋なCSS。

更新
問題モデルに関連してCSSに欠陥があります。これにより、ボタンをホバーしていなくても、フィールドセットのホバーが起動します。私はCSSで2番目の行.saveButton:hoverを使用し、他の答えが指摘しているようにクラスを使用して、フィールドセットのホバーにJavaScriptを使用します。

これが最善の解決策である

+0

+1実際に問題を見るのではなく、むしろ「固定」の解決策を示唆しています。 –

+0

私が探している実際の効果は、ユーザーが保存ボタンの上を移動するときにフィールドセットの概要を示すことです。私は:ホバーが他の要素に影響を与えるための方法があるとは思わなかった。 – chris

+0

あなたはあなたの前提で正しいです。私の方法は、あなたが私の更新で見ることができるように、欠陥があります。 – Stephen

関連する問題