【问题标题】:Retaining values of drop down that are disabled after submit保留提交后禁用的下拉列表值
【发布时间】:2017-10-16 20:55:50
【问题描述】:

我有这个包含大约 9 个下拉菜单的表单。我试图在提交后保留选定的值。我的代码适用于其中 2 个未禁用的下拉菜单,但不适用于其余 7 个禁用的下拉菜单。有没有其他方法可以为这些编写代码?

2 个未禁用的下拉菜单中的 1 个:-

<?php
$sql = "SELECT * FROM tablename1 ";
$result = mysqli_query($conn, $sql);
echo "<select name = 'account_name' id = 'idaname'>"; 
echo "<option value = ''>";
while($row = mysqli_fetch_array($result)){
    $selected = (isset($_POST['account_name']) && $_POST['account_name'] == $row['account_name']) ? 'selected = "selected"' :'';
    ?>
    <option <?php echo $selected; ?> value = "<?php echo $row['account_name']; ?>"> <?php echo $row['account_name']; ?> </option>
    <?php } ?>
    </select>

7 个禁用下拉菜单中的 2 个:-

<?php
$sql = "SELECT rsm_val FROM tablename2 ";
$result = mysqli_query($conn, $sql);
echo "<select name = 'rsm_val' id = 'rsm_val' onchange = 'runrsm()' disabled >"; 
echo "<option value = '" .$rsm_val . "'>" . $rsm_val . "</option>";
while($row = mysqli_fetch_array($result)){
    $selected = (isset($_POST['rsm_val']) && $_POST['rsm_val'] == $row['rsm_val']) ? 'selected = "selected"' :'';
    ?>
    <option <?php echo $selected; ?> value = "<?php echo $row['rsm_val']; ?>"> <?php echo $row['rsm_val']; ?> </option>
    <?php } ?>
</select>



<select name = 'boost_app' id = 'boost_app' onchange = 'runboost()' disabled>
<?php echo "<option value = '". $boost_app . "'>" . $boost_app .  "</option>"; ?>
<option <?php if($_POST['boost_app'] == 'Yes'){?> selected="true" <?php }; ?> value = "Yes">Yes</option>
<option <?php if($_POST['boost_app'] == 'No') {?> selected="true" <?php }; ?> value = "No">No</option>
</select>

【问题讨论】:

标签: php


【解决方案1】:

如果禁用下拉菜单,则不会将值发送到服务器。您可以添加具有相同名称和值的隐藏输入。

<input type="hidden" name="boost_app" value="<?php echo $_POST['boost_app'];?>">
<select name = 'boost_app' id = 'boost_app' onchange = 'runboost()' disabled>
<?php echo "<option value = '". $boost_app . "'>" . $boost_app .  "</option>"; ?>
<option <?php if($_POST['boost_app'] == 'Yes'){?> selected="true" <?php }; ?> value = "Yes">Yes</option>
<option <?php if($_POST['boost_app'] == 'No') {?> selected="true" <?php }; ?> value = "No">No</option>
</select>

【讨论】:

  • 好的,我有一些 javascript,在某些情况下会将 disabled 属性设置为 false(启用)。如果启用它,我计划在该下拉列表中有更新的选择,但现在我的更新查询失败了。我不确定我们如何使用隐藏字段的相同名称和 ID 来做到这一点
  • 启用下拉菜单时,您应该删除或重命名隐藏的输入。
  • 所以你是说我需要有 2 个隐藏输入?因为我已经有1个这样的--->
  • 不,只有一个隐藏输入。但是如果你启用下拉,你需要摆脱隐藏的输入,所以你没有两个同名的输入。
  • 实际上,我很惊讶它不起作用。如果有两个同名输入,我认为它使用最后一个,所以启用下拉菜单时应该忽略隐藏的输入。
【解决方案2】:

您可以改用readonly

<select name = 'boost_app' id = 'boost_app' onchange = 'runboost()' readonly>
<?php echo "<option value = '". $boost_app . "'>" . $boost_app .  "</option>"; ?>
<option <?php if($_POST['boost_app'] == 'Yes'){?> selected="true" <?php }; ?> value = "Yes">Yes</option>
<option <?php if($_POST['boost_app'] == 'No') {?> selected="true" <?php }; ?> value = "No">No</option>
</select>

这将不允许用户编辑值,并且也会通过表单提交发送数据。 Learn more about it.

编辑:如果readonly不适用于&lt;select&gt;标签,那么您可以disable除所选1之外的所有选项。喜欢:

<select name = 'boost_app' id = 'boost_app' onchange = 'runboost()'>
<?php echo "<option value = '". $boost_app . "' disabled>" . $boost_app .  "</option>"; ?>
<option <?php if($_POST['boost_app'] == 'Yes'){?> selected="true" <?php }else{echo "disabled";} ?> value = "Yes">Yes</option>
<option <?php if($_POST['boost_app'] == 'No') {?> selected="true" <?php }else{echo "disabled";} ?> value = "No">No</option>
</select>

或者你可以有一个同名的hidden输入,比如:

<input type="hidden" name="boost_app" value="<?=$_POST['boost_app']?>">
<select name = 'boost_app' id = 'boost_app' onchange = 'runboost()' disabled>
<?php echo "<option value = '". $boost_app . "'>" . $boost_app .  "</option>"; ?>
<option <?php if($_POST['boost_app'] == 'Yes'){?> selected="true" <?php }; ?> value = "Yes">Yes</option>
<option <?php if($_POST['boost_app'] == 'No') {?> selected="true" <?php }; ?> value = "No">No</option>
</select>

【讨论】:

  • 我认为您不能对选择菜单设置只读。我刚试过,用户可以在下拉菜单中更改选择
  • 查看隐藏的输入字段,我有一些javascript,在某些情况下会将禁用属性设置为false(启用)。如果是这样,我计划在该下拉列表中包含更新的选择,但现在我的更新查询不起作用。我不确定我们如何使用隐藏字段的相同名称和 ID 来做到这一点
  • @abc 您可以尝试类似$('input[name=boost_app]').attr("disabled", true); 的操作,以在启用选择时禁用隐藏输入,反之亦然。
【解决方案3】:

我使用它来使下拉菜单显示为“已禁用”

$(#boost_app).css({"background-color":"rgb(238, 238, 238)", "pointer-events":"none"}).keydown(false)

【讨论】:

    猜你喜欢
    • 2016-09-24
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多