2

3 つのボックスがあり、それらを切り替えて、2 回目のクリックでオフに切り替えたいと考えています。現在、それらの間でうまく切り替わります(IF部分)が、同じボックスをクリックしてオフに切り替えると、機能しない場合(「else if」部分が機能しないようです)。if文を再構築する必要があると思います。どんな助けでも大歓迎です。

これがJSフィドルです: http://jsfiddle.net/FFdjS/5/

要素のクリック if ステートメントの 1 つを次に示します。

box1.click(function() {
    if (box1.attr(strOff)) {
        box1.attr(strOn);
        box2.attr(strOff);
        box3.attr(strOff);
    } else if (box1.attr(strOn)) {
               box1.attr(strOff);
    } else {}
});
4

2 に答える 2

1

作成したステートメントは、最初のif-elseステートメントで常に true を返しますif...

この理由は、条件の場合、常に true を返すメソッドの結果を渡しているためです。Raphaels attr Specが示すように、このメソッドは...を返します。

  • 要素 (attr の名前と値が渡された場合)
  • 値 (属性名が渡された場合の属性)
  • 値の配列 (属性名が渡された場合)
  • attr オブジェクト (何も渡されない場合)

したがって、あなたは本質的settingにその if ステートメントの単なるボックスであり、true を返します。代わりに、確認する必要がある属性名だけを渡して、値と比較する必要があります。に似ている、

if(box1.attr('stroke-width')=='5'){...}else{...}

于 2012-11-30T22:23:08.477 に答える
1

Element.attr(...)オブジェクトが引数として渡されたときに属性を設定します。要素を返します。あなたがそれをtogleしたい場合は、次のようなものを使用してください:

box1.click(function() {
    if (box1.attr('stroke-width') == 1) {
        box1.attr(strOn);
        box2.attr(strOff);
        box3.attr(strOff);
    } else if (box1.attr('stroke-width') == 5) {
           box1.attr(strOff);
    } else {}
});

jsFiddle の

于 2012-11-30T22:25:09.440 に答える