我有一个多选下拉列表,例如这样。 无论是否在下拉列表中选择了其他值,我都需要始终在"设置[用户][]"中包含特定值。
我找到了一些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上尝试过此操作,我不能发誓所有浏览器和设置都将以相同的方式处理此问题。这就是为什么隐藏字段方法是一个更好的主意。