【问题标题】:How to check radio buttons如何检查单选按钮
【发布时间】:2012-03-08 19:51:50
【问题描述】:

我有以下mysql表:

|  id   |    Title    |  Windows | Linux | IDE | GUI | RAD |
------------------------------------------------------------
|   1   |  Software_1 |     1    |   0   |  1  |  0  |  0  |
------------------------------------------------------------
|   2   |  Software_2 |     0    |   1   |  0  |  1  |  0  |

我想通过查询 mySQL 数据库来填充表单。到目前为止,我能够填充输入字段、文本区域和复选框,但我完全坚持填充 radiobuttons。请注意,mySQL 存储 boolean 值:复选框(Windows、Linux) 和单选按钮(IDE、GUI、RAD)

这是从 dB 中检索数据并将其转换为 JSON 的 PHP 部分:

while($review = mysql_fetch_array($qry)) {
    $arr = array('id_field' => $review['id'],
                'title' => $review['title'],
                'homepage' => $review['link_homepage'],
                'windows' => $review['Windows'] == "1",
                'linux' => $review['Linux'] == "1",
                'ide' => $review['IDE'] == "1",
                'gui' => $review['GUI'] == "1",
                'rad' => $review['RAD'] == "1"
    );
    echo json_encode($arr);
} 

这是表格:

<form name="form" id="edit_review" method ="post" action="review.php">  
    Language name: <input type="text" size="34" value="" name="title"/>
    Windows <input type="checkbox" name="windows" />
    Linux <input type="checkbox" name="linux" />

    IDE <input type="radio" name="environment" id="ide" value="ide"/>
    GUI <input type="radio" name="environment" id="gui" value="gui"/>
    RAD <input type="radio" name="environment" id="rad" value="rad"/>
</form>

这是 jQuery 代码:

$(".editlink").click(function() {
    $.get("lists.php", {param2: $(this).attr('id')}, 
        function(data) {
            jsonOBJ = jQuery.parseJSON(data);
            for (var key in jsonOBJ) {
                $(":input[name='" + key + "']").val(jsonOBJ[key]);
                $(":input[name='" + key + "']").attr("checked", jsonOBJ[key]);
            }
        }   
    );    
    return false;
 });

字符串:

$(":input[name='" + key + "']").attr("checked", jsonOBJ[key]);

仅适用于复选框。单选按钮“名称”是“环境”,并且所有三个单选按钮必须相同。所以,当然,上面的线路不起作用。我尝试将其更改为:

$(":input[id='" + key + "']").attr("checked", jsonOBJ[key]);

我在单选按钮中添加了“id”,如下所示:

IDE <input type="radio" name="environment" id="ide" value="ide"/>

并且我注意到(使用“警报”)正确的复选框被选中,但只要循环继续,就会立即取消选中。为什么单选按钮未选中而复选框未选中?我该如何解决?

【问题讨论】:

  • 您使用的是什么版本的 jquery。这取决于您是否使用.attr或.prop。请参阅此答案以获取更多信息:stackoverflow.com/questions/977137/…
  • 天哪! 解决了!花了两天时间!谢谢 bsimic 我将 .attr 更改为 .prop 并且它突然起作用了。
  • 很高兴我可以提供帮助。我会将其添加为“解决方案”,因此如果您可以将其作为答案,也许它可以帮助其他正在搜索的人!

标签: jquery mysql json


【解决方案1】:

这取决于您使用的 jquery 版本。请查看:How to reset radiobuttons in jQuery so that none is checked 以获得您的答案。

【讨论】:

    【解决方案2】:

    这看起来似乎是一个愚蠢的建议,但是您是否正确分组了单选按钮?

    如果单选按钮取消选中,可能是因为正在处理同一组中的另一个单选按钮。

    您似乎正在尝试检查同一组中的所有单选按钮,这是不可能的。只能勾选一项。

    如果要检查所有选项,必须使用复选框或将每个单选按钮的 name 属性设置为不同的值

    只能勾选一项:

    IDE <input type="radio" name="environment" id="ide" value="ide"/>
    GUI <input type="radio" name="environment" id="ide" value="ide"/>
    RAD <input type="radio" name="environment" id="ide" value="ide"/>
    

    所有都可以检查(虽然没有单选按钮的意义):

    IDE <input type="radio" name="environment1" id="ide" value="ide"/>
    GUI <input type="radio" name="environment2" id="ide" value="ide"/>
    RAD <input type="radio" name="environment3" id="ide" value="ide"/>
    

    也可能是通过 jQuery 更改 checked 属性(无论是否为真)将停用其他单选按钮,因此也许尝试使用 jQuery 的 find() 来检查相关单选按钮而不是循环它们。

    【讨论】:

    • 嗨 JackalopeZero,正如您在我上面的代码中所见(“表单”部分),三个单选按钮正确组合在一起(它们都具有相同的名称),但每个按钮都有不同的 ID 和 VALUE .
    猜你喜欢
    • 2017-03-19
    • 1970-01-01
    • 2012-12-28
    • 2021-10-01
    • 2019-05-29
    • 2011-10-04
    • 2014-04-09
    • 2019-01-15
    • 2021-01-25
    相关资源
    最近更新 更多