为啥我的复选框会禁用其他值?

Posted

技术标签:

【中文标题】为啥我的复选框会禁用其他值?【英文标题】:Why do my checkboxes disable other values?为什么我的复选框会禁用其他值? 【发布时间】:2018-03-22 03:40:57 【问题描述】:

我将使用多个复选框,每次更改其中一个的值时,都会使所有其他复选框的值变为 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");

【问题讨论】:

您可能会检查复选框的 checked 属性而不是 value 属性。 【参考方案1】:

问题好像是

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 

其中 VALUES 包含不同变量的所有先前值(格式为“var1=value&var2=value&var3=value”

【讨论】:

我不太确定如何使用它。是不是类似于 $vars = $_SERVER['QUERY_STRING']; parse_str($vars, $vars_arr); if (isset($vars["music_status"]) && $vars["music_status"] == false) 代码在这里 您将使用 $_SERVER['QUERY_STRING'] 来修改重定向。问题是您只将一个值传递到下一页,您需要传递所有这些值。 我找到了自己的方法,通过简单地将 php 代码中的 else 语句更改为 else if 然后简单地将 == false 更改为 == true,其他复选框值不会变为 false。我仍然会接受这个答案,因为它是另一种方法。

以上是关于为啥我的复选框会禁用其他值?的主要内容,如果未能解决你的问题,请参考以下文章

如果选中第一个复选框,则根据条件禁用其他复选框

如果复选框选中禁用其他,如果未选中启用所有 JavaScript?

为啥在 Visual Studio 2012 中禁用了“首选 32 位”复选框?

jQuery - 如果值与数组中的元素匹配,则禁用复选框

HTML:为啥没有本地支持来限制复选框中的状态更改而不禁用它? [复制]

如果在primefaces中禁用复选框值,则该值将为false