2012-04-02 17 views
1

私はjqueryに新しいですので、この質問がばかげていると私には実感してください...私は類似しているが、私はボタンごとに別々の機能を書くことを計画していましたが、これを行うためのより簡単で効率的な方法があるのだろうかと思っていました。ここに私の2つのボタンがあります:ボタンのためのより効率的な方法を書くより効率的な方法

$('#architect').hover (function() { 
    $('.blank').addClass('txtarchitect'); 
    $('.bates,.han').addClass('over'); 
    }, 
    function(){ 
    $('.blank').removeClass('txtarchitect'); 
    $('.bates,.han').removeClass('over'); 
    } 
); 
}); 

$('#educator').hover (function() { 
    $('.blank').addClass('txteducator'); 
    $('.lee,.gorman').addClass('over'); 
    }, 
    function(){ 
    $('.blank').removeClass('txteducator'); 
    $('.lee,.gorman').removeClass('over'); 
    } 
); 
}); 

ありがとう、ありがとう!

+0

class1変数は常に「TXT」プラス要素のidが推移していることになる場合は、代わりにそれを提供する、あなたは、このバージョンにbutton()機能でclass1行を変更することができますこのためのJavaScriptはまったくありませんか? CSS ':hover'セレクタだけで、あなたが望むものを達成することはできませんか? – gilly3

+0

@ gilly3要素Aの上にマウスを置いたときに、CSSが要素Bにクラスを追加する方法を教えてください。 –

+0

@Juan - 要素Bまたは要素Bの祖先が要素Aの兄弟である場合、要素Bのクラスを変更する必要はありません。兄弟コンビネータを使用してスタイルを変更するだけです。要素Bが要素Aよりもドキュメント階層の上位にある場合、JavaScriptが必要です。 – gilly3

答えて

1

変更値は、その後

function addHoverHandler(buttonId, blankCls, overClasses) { 
    $('#'+ buttonId).hover(
    function(){ 
     $('.blank').addClass(blankCls); 
     $(overClasses).addClass('over'); 
    }, 
    function(){ 
     $('.blank').removeClass(blankCls); 
     $(overClasses).removeClass('over'); 
    } 
    ); 
} 

var buttons = [ 
    {btnId: 'educator', blankCls: 'texteducator', overClasses: '.lee,.gorman'}, 
    {btnId: 'architect', blankCls: 'textatchitect', overClasses: '.bates,.han'} 
]; 



for (var i =0; i < buttons.length; i++) { 
    var btn = buttons[i]; 
    addHoverHandler(btn.btnId, btn.blankCls, btn.overClasses); 
} 
+0

ニースの答え。それは、彼のアプローチを再考することで、OPがより効果的になるだろうと私は思う。 *全体の "私の神、それはボタンでいっぱいです" *アプローチは物流と使い勝手の悪夢を約束します。 –

+0

ええ、しかし、SOは、私がやったことをどうやってやるのかという質問に答えるためのものです。私は、それがどのように使用されているかについての情報がない何かをする良い方法があると主張するつもりはない。しかし、ええ、私が書いたように、私は本当に、ページの20のボタンを考えましたか? –

+0

@元 - ありがとうございます、あなたの答えはすぐにそれを試してみましょう!あまりにも多くのボタンがあることに同意しますが、私はこのプロジェクトのプログラマーであり、デザインをコントロールすることはできません。みんなの感謝をお寄せください! – peachorama

1
function button(class1, class2, class3, dir){ 
    if(dir == 1){ 
     $(this).addClass(class1); 
     $("."+class2+", ."+class3).addClass("over"); 
    }else{ 
     $(this).removeClass(class1); 
     $("."+class2+", ."+class3).removeClass("over"); 
    } 
} 

仕事をする必要があるパラメータ化簡単な関数:

$("#educator").hover(function(){ 
    button("txteducator", "bates", "han", 1); 
}, function(){ 
    button("txteducator", "bates", "han", 0); 
}); 

は、各ボタンに同じ操作を行います。あなたも、任意のが必要です

$(this).addClass("txt"+$(this).id()); 
+0

これは正しい方向ですが、まだホバーを20回呼び出す必要があります。それは簡単に抽象化することができます。私の答えを見てください。また、class1、class2、class3の名前は、同じことを意味するので、かなり悪いです。 –

+0

'class1、class2、class3'は明らかにプレースホルダです。私はこれらのクラスがOPのコードで何をしているのかわからないので... –