为什么我的复选框禁用其他值?
我有多个复选框,我将使用它,每当我更改其中一个值时,它会使所有其他值的值为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");
}
的问题似乎是
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 =值“
我不太确定我会如何去使用它。 $ vars = $ _SERVER ['QUERY_STRING']; parse_str($ vars,$ vars_arr); if(isset($ vars [“music_status”])&& $ v ars [“music_status”] == false){Code Here} –
您将使用$ _SERVER ['QUERY_STRING']来修改重定向。问题是,你只传递一个值到下一页,你需要传递所有的值。 – Imme
我发现我自己的方法,让其他复选框的值不会变成false,只需在php代码中更改我的else语句,然后将if == false更改为== true即可。我仍然会接受这个答案,因为它会是一种替代方法。 –
你可能会检查复选框的'checked'属性而不是'value'属性 – theGleep