2

我有 3 个框,我希望它们在它们之间切换,并在第二次单击时关闭。目前它在它们之间切换很好(IF部分),但是当我单击同一个框以将其关闭时,如果不起作用(“else if”部分似乎不起作用)。我想我需要重组 if 语句。任何帮助是极大的赞赏。

这是 JS 小提琴:http: //jsfiddle.net/FFdjS/5/

这是元素的单击 if 语句之一:

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语句将始终在第一个if...

这样做的原因是,对于条件,您传递的方法的结果将始终返回 true。正如Raphaels attr Spec所指出的,该方法将返回......

  • 元素(如果传递了 attr 名称和值)
  • 值(如果传递了 attr 名称,则为属性)
  • 值数组(如果传递了 attr 名称)
  • attr 对象(如果没有通过)

所以,你本质上只是setting那个 if 语句中的盒子,然后它会返回 true。相反,您应该只传递需要检查的 attr 名称并将其与您的值进行比较。如同,

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

于 2012-11-30T22:23:08.477 回答
1

Element.attr(...)当对象作为参数传递时设置属性。返回元素。如果您想对其进行调整-使用以下内容:

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 回答