为什么我的复选框禁用其他值?

问题描述:

我有多个复选框,我将使用它,每当我更改其中一个值时,它会使所有其他值的值为false。我唯一能想到的是,当值被改变并发送到validate.php时,它也会查找其他值并相应地设置。如果是这样的话,我怎么能这样做,只有预期的价值得到改变。为什么我的复选框禁用其他值?

的JavaScript/jQuery代码片段(没有为每个变量的变化功能):

$(document).ready(function() { 
    var music = document.getElementsByName("music_status"); 
    var music_value = document.getElementsByName("music_status")[0].value; 
    var rules = document.getElementsByName("rules_status"); 
    var rules_value = document.getElementsByName("rules_status")[0].value; 
    var serverinfo = document.getElementsByName("serverinfo_status"); 
    var serverinfo_value = document.getElementsByName("serverinfo_status")[0].value; 
    var module1 = document.getElementsByName("module1_status"); 
    var module1_value = document.getElementsByName("module1_status")[0].value; 
    var module2 = document.getElementsByName("module2_status"); 
    var module2_value = document.getElementsByName("module2_status")[0].value; 
    var module3 = document.getElementsByName("module3_status"); 
    var module3_value = document.getElementsByName("module3_status")[0].value; 

    $(music).change(function() { 
     if ($(music_value).val() == 'false') { 
      $(music).val('true'); 
     } else { 
      $(music).val('false'); 
     } 
     window.location.href = 'validate.php?music_status=' + music_value; 
    }) 

    $(rules).change(function() { 
     if ($(rules_value).val() == 'false') { 
      $(rules).val('true'); 
     } else { 
      $(rules).val('false'); 
     } 
     window.location.href = 'validate.php?rules_status=' + rules_value; 
    }) 

}); 

HTML代码段(有更多的复选框的名称和变量名称更改):

<input type="checkbox" name="music_status" id="cmn-toggle-1" class="cmn-toggle cmn-toggle-round-flat" value="<?php echo $music_status?>" <?php if ($music_status == 'true') {?> checked <?}?>> 
<label for="cmn-toggle-1"></label> 

validate.php代码:

if (isset($_GET["music_status"]) && $_GET["music_status"] == 'false') { 
    $config -> SetVar("music_status", 'true', "Music Status"); 
} else { 
    $config -> SetVar("music_status", 'false', "Music Status"); 
} 

if (isset($_GET["rules_status"]) && $_GET["rules_status"] == 'false') { 
    $config -> SetVar("rules_status", 'true', "Rule Status"); 
} else { 
    $config -> SetVar("rules_status", 'false', "Rule Status"); 
} 

if (isset($_GET["serverinfo_status"]) && $_GET["serverinfo_status"] == 'false') { 
    $config -> SetVar("serverinfo_status", 'true', "Server Info Status"); 
} else { 
    $config -> SetVar("serverinfo_status", 'false', "Server Info Status"); 
} 

if (isset($_GET["module1_status"]) && $_GET["module1_status"] == 'false') { 
    $config -> SetVar("module1_status", 'true', "Module 1 Status"); 
} else { 
    $config -> SetVar("module1_status", 'false', "Module 1 Status"); 
} 

if (isset($_GET["module2_status"]) && $_GET["module2_status"] == 'false') { 
    $config -> SetVar("module2_status", 'true', "Module 2 Status"); 
} else { 
    $config -> SetVar("module2_status", 'false', "Module 2 Status"); 
} 

if (isset($_GET["module3_status"]) && $_GET["module3_status"] == 'false') { 
    $config -> SetVar("module3_status", 'true', "Module 3 Status"); 
} else { 
    $config -> SetVar("module3_status", 'false', "Module 3 Status"); 
} 
+1

你可能会检查复选框的'checked'属性而不是'value'属性 – theGleep

的问题似乎是

window.location.href = 'validate.php?music_status=' + music_value; 

注意,每次“刷新”时的页面,你只发送改变了,你可以使用变量的状态:

$_SERVER['QUERY_STRING'] // contains the current _GET parameters 

或在javascript等效(请参见:how to get GET variable's value in javascript?)至将新的状态添加到它。

一旦你做了,你的链接应该是这个样子

window.location.href = 'validate.php?' + VALUES + '&music_status= + music_values 

其中数值包含了不同变量的所有先前值(以“VAR1格式=值& VAR2 =值& VAR3 =值“

+0

我不太确定我会如何去使用它。 $ vars = $ _SERVER ['QUERY_STRING']; parse_str($ vars,$ vars_arr); if(isset($ vars [“music_status”])&& $ v ars [“music_status”] == false){Code Here} –

+0

您将使用$ _SERVER ['QUERY_STRING']来修改重定向。问题是,你只传递一个值到下一页,你需要传递所有的值。 – Imme

+0

我发现我自己的方法,让其他复选框的值不会变成false,只需在php代码中更改我的else语句,然后将if == false更改为== true即可。我仍然会接受这个答案,因为它会是一种替代方法。 –