jQuery-切换两个开关,但不能同时切换两个?

jQuery-切换两个开关,但不能同时切换两个?,jquery,toggle,switch-statement,Jquery,Toggle,Switch Statement,我有个棘手的小问题。在本例中,我创建了两个开关和两个彩色方块: 我试图确保一次只能关闭一个开关,因此始终至少有一个彩色方块显示,或者两者都显示 我也一直在试图弄清楚;如果开关(1)处于打开状态,您单击开关(2),它将切换为打开(2)和关闭(1)-如上所述,您将无法关闭开关(2),但可以将开关(1)重新打开,使两者都打开 我希望这有道理有人能建议一种方法来让它发挥作用吗 <ul id="switches"> <li><a id="switch1" href="#"&g

我有个棘手的小问题。在本例中,我创建了两个开关和两个彩色方块:

我试图确保一次只能关闭一个开关,因此始终至少有一个彩色方块显示,或者两者都显示

我也一直在试图弄清楚;如果开关(1)处于打开状态,您单击开关(2),它将切换为打开(2)和关闭(1)-如上所述,您将无法关闭开关(2),但可以将开关(1)重新打开,使两者都打开

我希望这有道理有人能建议一种方法来让它发挥作用吗

<ul id="switches">
<li><a id="switch1" href="#">1</a></li>
<li><a id="switch2" href="#">2</a></li></ul>
<ul id="squares">
<li id="square1"></li>
<li id="square2"></li></ul> 


$(function() { 

$('#switch1').toggle(function() {
    $('#square1').css("visibility", "hidden");
    $('#switch1').addClass("off");
}, function(){
    $('#square1').css("visibility", "visible"); 
    $('#switch1').removeClass("off");  
});

$('#switch2').toggle(function() {
    $('#square2').css("visibility", "hidden");
    $('#switch2').addClass("off");
}, function(){
    $('#square2').css("visibility", "visible");
    $('#switch2').removeClass("off");      
}); });
测试:

如果隐藏最后一个,则显示另一个:

测试:


如果隐藏最后一个,则显示另一个:

您希望它如何工作

如果开关2关闭,您想禁用开关1关闭,还是希望开关1关闭,开关2自动打开

如果要禁用开关,则需要将隐藏它的两行代码包装在if语句中,以检查另一个正方形的可见性(或者如果另一个开关具有class('off'))


如果要打开另一个,请在隐藏正方形的两行之后进行检查。

您希望它如何工作

如果开关2关闭,您想禁用开关1关闭,还是希望开关1关闭,开关2自动打开

如果要禁用开关,则需要将隐藏它的两行代码包装在if语句中,以检查另一个正方形的可见性(或者如果另一个开关具有class('off'))


如果要打开另一个开关,请在隐藏正方形的两行之后进行检查。

要解决此类问题,请始终使用这种方法:从您知道两个开关的状态的位置开始。例如,您有一个地方可以单击以打开按钮1。使用以下伪代码:

onclick="turnOn(button1)"

function turnOn(b) {
    setButton(button1, b === button1);
    setButton(button2, b === button2);
}

function setButton(b, on) {
    ... set button to "on" if on === true else to "off"
}

即:始终设置所有按钮的状态。不要试图聪明地创建一个“补丁”(即一组最小的更改以达到所需的目标状态)。这是脆弱的,最终会失败·

要解决这样的问题,请始终使用这种方法:从您知道两个开关的状态的地方开始。例如,您有一个地方可以单击以打开按钮1。使用以下伪代码:

onclick="turnOn(button1)"

function turnOn(b) {
    setButton(button1, b === button1);
    setButton(button2, b === button2);
}

function setButton(b, on) {
    ... set button to "on" if on === true else to "off"
}

即:始终设置所有按钮的状态。不要试图聪明地创建一个“补丁”(即一组最小的更改以达到所需的目标状态)。这很脆弱,最终会失败·

尽管实例链接是问题的一个很好的附件,但始终将相关代码实际发布到问题本身中。人们不必跟随链接来帮助你,外部链接可以被移动、修改、删除等(请记住,StackOverflow是未来有类似问题的人的资源,而不仅仅是你现在的问题。因此,请确保整个问题仍然存在。),现在我将更新这个问题。虽然实例链接是问题的一个很好的附件,但始终将相关代码实际发布到问题本身中。人们不必跟随链接来帮助你,外部链接可以被移动、修改、删除等(记住,StackOverflow是未来有类似问题的人的资源,而不仅仅是你现在的问题。因此确保整个问题仍然存在。)好的一点,我现在就更新这个问题。嗨,为你的回答干杯。基本上,我试图避免两个方块都“关闭”,同时在按下另一个方块时也让它们切换。嗨,为你的答案干杯。基本上,我试图避免两个方块都“关闭”,同时在按下另一个方块时让它们切换。完美,这正是我的意思。真不敢相信每个人的反应都这么快!非常感谢你的帮助。太好了,这正是我的意思。真不敢相信每个人的反应都这么快!非常感谢你的帮助。
onclick="turnOn(button1)"

function turnOn(b) {
    setButton(button1, b === button1);
    setButton(button2, b === button2);
}

function setButton(b, on) {
    ... set button to "on" if on === true else to "off"
}