【问题标题】:Keep values in radio buttons after submit提交后保留单选按钮中的值
【发布时间】:2016-09-22 00:01:15
【问题描述】:

我正在构建一个带有单选按钮的表单。

<form id="land" name="input" method="POST" action="test.php">
    <input type="radio" name="Albania" value="Albania" class="test">
    <input type="radio" name="Sweden" value="Sweden" class="test">
    <input type="radio" name="Norway" value="Norway" class="test">
    .....
    <input type="hidden" name="hidden" value="action">
    <input type="submit" value="Submit">
</form>

有 150 多个国家/地区可供选择。当你选择一个国家时,我正在构建的应用程序会显示一个折线图,代表相关国家的数据。我已经构建了一个脚本,以便我可以有多种选择。基本上,它会构建一个包含选定值的数组,然后从内爆数组构建一个 SQL 查询。

当我使用提交按钮发送数据时,这很好用。但我希望图表在用户选中单选按钮时直接更新。我加了

onClick='this.form.submit()'

到输入字段,这工作正常。

我的问题是我现在不能选择两个值,例如挪威和瑞典来比较这两个值,因为一旦我选中一个单选按钮,页面就会加载并且值消失并且单选按钮未选中。

所以。如何在值不消失的情况下发送查询?

非常感谢任何帮助!

【问题讨论】:

  • 该值将始终消失。解决方案是检查新页面上的选定值。为此,您可以将checked="checked" 添加到您希望在页面加载时检查的选项中。
  • 在 ajax 调用成功时,您可以从隐藏字段中获取值并根据该值检查该单选按钮
  • 列表中有 150 多个国家/地区,我会考虑使用多行选择框或某种搜索机制。
  • 好吧,我现在不知道,我认为这很好用,例如:gapminder.org

标签: javascript jquery ajax radio-button


【解决方案1】:
<input <?php if (!(strcmp($_POST['Albania'],"Albania"))) {echo 'checked="checked"';} ?> type="radio" name="Albania" value="Albania" class="test">
<input <?php if (!(strcmp($_POST['Sweden'],"Sweden"))) {echo 'checked="checked"';} ?> type="radio" name="Sweden" value="Sweden" class="test">
<input <?php if (!(strcmp($_POST['Norway'],"Norway"))) {echo 'checked="checked"';} ?> type="radio" name="Norway" value="Norway" class="test">

但是你为什么不使用复选框呢?也许用户要取消选中其中一个无线电输入。

我建议您将单选按钮的名称更改为:name="country[countryName]" 通过implode()检索所选国家/地区会更容易

<input <?php if (in_array("Albania", $_POST['country'])) {echo 'checked="checked"';} ?> type="radio" name="country[Albania]" value="Albania">
<input <?php if (in_array("Sweden", $_POST['country'])) {echo 'checked="checked"';} ?> type="radio" name="country[Sweden]" value="Sweden">
<input <?php if (in_array("Norway", $_POST['country'])) {echo 'checked="checked"';} ?> type="radio" name="country[Norway]" value="Norway">

生成单选按钮:

<?php while($row = mysql_fetch_array($sth)) { ?> 
<input class="className" type="radio" name="country[<?php echo $row['land']; ?>]" value="<?php echo $row['land'];?>" onClick='this.form.submit()' <?php if (in_array($row['land'], @$_POST['country'])) {echo 'checked="checked"';} ?> /><?php echo $row['land'];?> 
<?php }?>

【讨论】:

  • 好的,感谢您提供这些见解!问题是我使用 while 循环创建了表单(因为我认为这更方便),如下所示: while( $row = mysql_fetch_array($sth)) { ?>
    不太确定如何使用循环实现您的解决方案?我不想手动输入所有 150 个输入字段。
  • 给我一分钟,我会帮你的
  • 您是只生成一次单选按钮并在页面中使用 html 还是每次加载该页面时都会生成?
  • 每次页面加载时生成
  • gr8 然后我给了你解决方案,请尝试一下。但请注意输入名称name="country[],您可以随意重命名。
【解决方案2】:

我认为这不是问题。这正是 HTML 和浏览器的工作方式。 如果您使用 Ajax 调用而不是提交表单(并因此重新加载页面),则将保留所有选择的选项。 如果您希望提交并重新加载页面以便执行您的服务器代码,您将需要创建一个或多个服务器变量来保存用户选择的选项。在 UI 中,在呈现表单和单选按钮时,您需要检查是否选择了选项并使用“checked”属性,例如:

【讨论】:

    【解决方案3】:
    <script type="text/javascript">
        $(document).ready(function ()
        {
            $('input[type="radio"]').click(function ()
            {
                var values = "";
                $('input[type="radio"]:checked').each(function ()
                {
                    values = values + " - " + $(this).val();
                });
                alert(values);
                // Send your query here..
            });
        });
    </script>
    

    【讨论】:

      猜你喜欢
      • 2015-01-20
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 2013-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多