【发布时间】:2019-11-20 22:54:48
【问题描述】:
所以我有一个 html 表单,其中包含一个名为 "user_id[]" 的选择字段,以及另一个名为 "equipment_id[] 的相同表单中的选择字段。要点:
- 每次我想添加另一组
"user_id[]"和"equipment_id[]字段时,我都会使用 javascript 函数来复制它们。 - 在
"user_id[]"字段中,我可以一次选择一个用户。 - 在
"equipment_id[]"字段中,我可以从设备列表中选择多个选项。
当我 var dump 两个用户的示例条目时提交表单时,我目前得到的是:
["user_id"]=> array(2) {
[0]=> string(3) "178"
[1]=> string(3) "181"
}
["equipment_id"]=> array(5) {
[0]=> string(1) "3" // this element was selected with user_id 178
[1]=> string(1) "4" // this element was selected with user_id 178
[2]=> string(1) "3" // this element was selected with user_id 181
[3]=> string(1) "4" // this element was selected with user_id 181
[4]=> string(1) "5" // this element was selected with user_id 181
}
我想要达到的情况是 user_id 在其下具有每个选定的设备 ID,而不是在单个数组中,因此我可以将选定的设备与选定的用户关联起来。
我认为这可以通过使用"user_id[]" 字段作为"equipment_id[]" 字段的键来实现,这样如果提交表单,设备可能与用户相关联。
表单元素是:
<select name="user_id[]">
<option value="" disabled selected>Choose a User</option>
<option value="178">178</option>
<option value="181">181</option>
</select>
<select name="equipment_id[]" multiple tabindex="10">
<option value="" disabled selected>Choose Equipment</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
所以问题:
有没有办法使用
user_id[]字段作为equipment_id[]字段的键,以便我可以使用user_id[]提取为子数组?如果没有,是否有其他方法可以按用户对
equipment_id[]字段选择进行编目并提取它们?
感谢任何指点! :0)
更新
我想我在 Stackexchange 的其他一些研究中偶然发现了这个问题的答案。
我的代码在下面
PHP/HTML
<?php
var_dump($_POST);
?>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<button id="repeat">Add New Items</button>
<form class="work_entry_form" id="workform" action="#" method="POST">
<div class="group">
<select name="user_id[0]" id="user_id">
<option value="" disabled selected>Choose user</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="1">3</option>
<option value="2">4</option>
</select>
<select name="equipment_id[0][]" id="equipment_id" multiple tabindex="10">
<option value="" disabled selected>Choose Equipment</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
</div>
<div class="extras" id="extras"></div>
<input type="submit" id="submit">
</form>
</body>
</html>
JavaScript(部分感谢 @superUntitled 来自 Increment multidimensional array when form fields are cloned 帖子)
$(document).ready(function() {
$('#repeat').click(function(){
var newgroup = $('.group:last').clone(true);
newgroup.find(':input').each(function(){
this.name = this.name.replace(/\[(\d+)\]/,function(str,p1){return '[' + (parseInt(p1,10)+1) + ']'});
}).end().appendTo('#extras');
});
});
这会导致 var 转储的(示例)细分如下:
array(2) {
["user_id"]=> array(4) {
[0]=> string(1) "1"
[1]=> string(1) "2"
[2]=> string(1) "1"
[3]=> string(1) "2"
}
["equipment_id"]=> array(4) {
[0]=> array(2) {
[0]=> string(1) "1"
[1]=> string(1) "2"
}
[1]=> array(3) {
[0]=> string(1) "2"
[1]=> string(1) "3"
[2]=> string(1) "4"
}
[2]=> array(2) {
[0]=> string(1) "4"
[1]=> string(1) "5"
}
[3]=> array(2) {
[0]=> string(1) "2"
[1]=> string(1) "4"
}
}
}
我希望这对将来的某人有用!
JS Fiddle 如果有人想要的话:JSFiddle
【问题讨论】:
-
您可以选择多个设备,当用户被选中时,这些设备会显示/隐藏。否则,您将不得不使用 Javascript 来构建您的作业并使用 AJAX 提交。
-
这在 PHP 中是可能的,但是,我相信将需要 javascript 来发出请求。你要发送类似
?user_id[178][]=3&user_id[178][]=4