2012-01-22 7 views
2

にクラス名として、クリックされた要素のIDを割り当てる:は、私はプロジェクトに取り組んでいますが、私が書いたコードは本当に間違っている別の要素

$('#lart').click(function(){ 
    $("#form3").addClass("lart"); 
}); 
$('#posht').click(function(){ 
    $("#form3").addClass("posht"); 
}); 
$('#majt').click(function(){ 
    $("#form3").addClass("majt"); 
}); 
$('#djatht').click(function(){ 
    $("#form3").addClass("djatht"); 
}); 

私は、switch文でそれを行うことを考えるが、私は作る方法を知りませんケースの変数。上記のコードは正しく動作しません。なぜなら、もっと多くのオプションをクリックするとクラスが追加され、クラスを追加したくないからです。ただ一つ(lart、posht、djatht、majt)だけです。

もし私がdhathtとposhtとmajtを使ってlartを変更するのと同じように、これが2つのペアを持っていれば、これはidの意味です:lart = up posht = down majt = left djatht = right so私が上のボタンをクリックすると、クラスを右クリックして、右に1つ以上のクラスを追加するか、または左にします。または、私がダウンボタンをクリックすると、私は右または左を変更することができますが、これは可能ですか(上下および左/右または上および左/右)でしょうか?

答えて

4

switch文は必要ありません。単純に、すべての要素を選択し、イベントハンドラをバインドし、クラスとしてIDを使用します。

:あなたは他のクラスを削除していないことを確認したい場合は

$('#lart, #posht, #majt, #djatht').click(function(){ 
    $("#form3").prop('class', this.id); 
}); 

、これを使用します

$('#lart, #posht, #majt, #djatht').click(function(){ 
    $("#form3").removeClass('lart posht majt djatht').addClass(this.id); 
}); 

アップデート:コメントに投稿された問題への解決策(理解を容易にするために、私は方向のための英語の単語を使用することがあります):

var opposites = { 
     up:  'down', 
     down: 'up', 
     right: 'left', 
     left: 'right' 
    }; 

$('#up, #right, #down, #left').click(function() { 

    $("#form3").addClass(this.id).removeClass(opposites[this.id]); 
}); 
+0

これは確かに簡潔なアプローチです。ただし、バグの原因となる可能性があります。将来的には、これらの要素の1つがクリックされたときに消えることを認識せずに、クラス名をフォームに追加するのは簡単なので、 – davidchambers

+0

@davidchambers - 真。わずかに異なるアプローチで更新されました。 –

+1

@JosephSilberもし私がdhathtとposhtとmajtでlartを変更するのと同じように2つのペアを持たせたいなら、これはidの意味です:lart = up posht = down majt = left djatht = right so if私は上のボタンをクリックして、クラスを右クリックしてください。ちょうど右に呼ばれる1つのクラスを追加しようとしています。または私がダウンボタンをクリックすると、私は右または左を変更することができますが、それは(下および左/右または上および左/右)になります –

1

.prop('class', this.id); 

あなたが引用符をエスケープしていますが、一度に一つのクラスをしたい場合は、使用してきた理由はわからない... ...ではなくaddClass

2

更新:一度に1つのクラスのみを追加します。

$("#lart,#posht,#majt,#djatht").click(function() { 
    $("#form3").attr('class',this.id); 
}); 
+0

'を使うのではなく。jQueryの '.one()'](http://api.jquery.com/one/)を使用してください。 –

+0

質問を再読み込みした後に更新しましたが、 '.one()'リファレンスについて感謝します。 –

+0

@Matt LOそれは同じ仕事をしました、それらをすべてクリックした後にすべてのクラスを追加しました。 #lart idをクリックするとlartクラスが追加されます。#posht idをクリックすると、poshtクラスが追加され、以前のクラス(lart )が削除されます –

1

ここではクラス名ではなくdata-属性を使用します。

$.each(['lart', 'posht', 'djatht', 'majt'], function (idx, id) { 
    $('#' + id).click(function() { 
    $('#form3').attr('data-selected', id) 
    }) 
}) 

この方法では、トリガーの1つをクリックするたびに前の値を上書きします。必要な場合は、CSSセレクタでdata-属性を使用することができます。

#form3[data-selected="lart"] { 
    ... 
} 
関連する問題