我正在尝试创建一个数组,该数组结合了输入字段的标签和值。问题是我的jQuery代码结合了所有标签和输入值,而不仅仅是那些被选中的。我正在尝试的代码如下:
jQuery:
let values = [];
$("label[for='servicelist-label[]'], input[name='servicelist-details[]']").each(function() {
values.push($(this).text());
values.push($(this).val());
});
PHP隐含代码:
$serviceinfo = implode("",array_map(function($i){
return implode("<br>",$i);
},array_chunk($_POST['servicelist'],2)));
PHP表单元素:
<label for="servicelistlabel[]" >Service 1: </label><input class="list" type="checkbox" name="servicelistcheckbox[]" id="servicelist1" value="Area 1"><br>
<label for="servicelistlabel[]" >Service 2: </label><input class="list" type="checkbox" name="servicelistcheckbox[]" id="servicelist2" value="Area 2"><br>
<label for="servicelistlabel[]" >Service 3: </label><input class="list" type="checkbox" name="servicelistcheckbox[]" id="servicelist3" value="Area 3"><br>
任何帮助都将不胜感激!非常感谢。
你离得太近了,你只需要切换内爆分离器:
$serviceinfo = implode("<br>",array_map(function($i){
return implode(" ",$i);
},array_chunk($_POST['servicelist'],2)));
这应该会产生所需的输出。
编辑:
好的,我现在知道你想要实现什么了。JS部分有几个问题。我会很快检查你的代码
$("label[for='servicelistlabel[]'], input[name='servicelistcheckbox[]']:checked").each(function() {
values.push($(this).text());
values.push($(this).val());
});
- 您同时在标签和复选框上进行迭代
$(this)
是一次迭代的标签,是下一次迭代中的复选框- 因为
$(this).val()
在第一次迭代中是空的,因为标签没有值 $(this).text()
在下一次迭代中为空,因为复选框没有文本- 这将为您选中的每个复选框生成一个类似
["Label", "", "", "Value"]
的数组结构 - 此外,标签中的
for=""
属性必须与复选框的id=""
属性匹配,否则标签将不会在单击时触发
如何解决
https://jsfiddle.net/5ubnes1k/看看这把小提琴。我将每个标签/复选框组合放入一个div.checkbox
中,以便更容易地选择它
let values = [];
$(".checkbox").each(function() {
const label = $(this).find('label');
const checkbox = $(this).find('input[type="checkbox"]');
if (checkbox.is(":checked")) {
values.push(label.text(), checkbox.val());
}
});
现在我们只对.checkbox
div进行迭代,选择里面的标签和复选框。如果复选框被选中,我们将标签文本和复选框值推入数组。输出类似于:["Service 1: ", "Service1", "Service 3: ", "Service3"]
有了这个数组结构,您应该能够使用代码的implode
部分获得所需的结果。
@cluster在我需要切换内爆分离器的事实上走在了正确的轨道上。最后,我的array_couck需要值为4,换行符需要在不同的位置才能工作。以下是其他有类似问题的人的工作代码:
$serviceinfo = implode(array_map(function($i){
return implode(" ", $i);
},array_chunk($_POST['servicelist'],4)),"<br>");
编辑:正如@conflict所指出的,我的内爆代码在PHP8中不起作用。看起来我的数组不正确。基本上,我试图在数组中同时包含标签和复选框值,但无论复选框是否选中,都会添加所有标签。
这是一个我不知道如何解决的jQuery问题。使用的代码如下:
PHP表单元素:
<label for="servicelistlabel[]" >Service 1: </label><input class="list" type="checkbox" name="servicelistcheckbox[]" id="servicelist1" value="Service1"><br>
<label for="servicelistlabel[]" >Service 2: </label><input class="list" type="checkbox" name="servicelistcheckbox[]" id="servicelist2" value="Service2"><br>
<label for="servicelistlabel[]" >Service 3: </label><input class="list" type="checkbox" name="servicelistcheckbox[]" id="servicelist3" value="Service3"><br>
jQuery:
let values = [];
$("label[for='servicelistlabel[]'], input[name='servicelistcheckbox[]']:checked").each(function() {
values.push($(this).text());
values.push($(this).val());
});
PHP隐含函数(不正确(:
$serviceinfo = implode(array_map(function($i){
return implode(" ", $i);
},array_chunk($_POST['servicelist'],4)),"<br><br>");