多选下拉列表 - 需要隐藏的选定值或始终选定的值


multiple select dropdown - need a hidden selected value or always selected value

我有一个多选下拉列表,例如这样。 无论是否在下拉列表中选择了其他值,我都需要始终在"设置[用户][]"中包含特定值。

我找到了一些jquery解决方案...有没有其他方法可以向此数组添加特定值? 实际值不需要显示在选择区域中,它只需要在发布时始终包含在数组中。

基本上正在发生的事情是选择要编辑的用户,该用户会弹出可以更改的不同设置。 我正在使用此选择框,以允许他们根据需要将这些新设置设置为其他用户。因此,他们正在编辑的原始用户值在传递给我的 php 脚本进行处理时必须始终存在于"settings[users][]"中。

<select multiple="multiple" name="settings[users][]" size="8">
  <option value="" selected="selected">no additional users...</option>
  <option value="1">User 1</option>
  <option value="2">User 2</option>
  <option value="3">User 3</option>
  <option value="4">User 4</option>
</select>

编辑:

并没有真正得到我想要的回复......这是我目前正在做的事情。

在始终选择的用户的表单中添加了隐藏字段:

<input type="hidden" name="user_id" value="someuserID"/>

在 PHP 中,则:

// push always selected user id to the posted array
array_push($_POST['settings']['users'], $_POST['user_id']);
// filter out any empty value such as if 'no additional users...' was left selected
$userArray = array_filter($userArray);

$userArray现在等于我需要在我的 php 中编辑/更改的所有用户

这里的评论试图(温和地)指出这样一个事实,即你想做的事情几乎肯定是不必要的,而且它不必要地使代码复杂化——你真的想让 HTML 复杂化(任何用户都可以看到的位)只是为了简化 PHP?

话虽如此,我可以想象一个可能需要这样做的可能情况,我会谈到这一点。但让我先介绍其他情况。

首先,如果固定值在整个网站/应用程序上永久固定,则只需在PHP中对其进行硬编码即可。正如阿米尔·巴瓦布(Amir Bawab)在评论中所说:

$_POST['settings'][] = "someuserID"; // or array_push if you prefer
// Carry on as normal here ... 

其次,如果值根据网站上下文而变化,因此只有 HTML 知道,那么您在编辑中的解决方案绝对是正确的方法。它很干净,HTML和PHP中发生的事情很明显,以后很容易调试和支持。

但是,也许您无法访问PHP页面,并且绝对需要发布正确的结构。正如你所说,你可以在jQuery/Javascript中通过拦截表单提交并插入标记为选定的额外隐藏值来做到这一点。

但是,如果您决定将其作为纯 HTML 进行操作(也许您没有脚本),那么您可以这样做:

<select multiple="multiple" name="settings[users][]" size="8">
  <option value="" selected="selected">no additional users...</option>
  <option value="1">User 1</option>
  <option value="2">User 2</option>
  <option value="3">User 3</option>
  <option value="4">User 4</option>
</select>
<select style='display:none' multiple="multiple" name="settings[users][]">
  <option value="someusedID" selected="selected"></option>
</select>

如果我在 PHP 中print_r($_POST),我会得到(我选择了用户 2):

Array
(
    [settings] => Array
        (
            [users] => Array
                (
                    [0] => 4
                    [1] => someusedID
                )
        )
)

我想,这就是你想要的。

请注意,我

通过本地服务器(XAMPP)在Chrome上尝试过此操作,我不能发誓所有浏览器和设置都将以相同的方式处理此问题。这就是为什么隐藏字段方法是一个更好的主意。