如何在jQuery数组中包含复选框值和关联的标签文本,在多个内爆值后使用换行符



我正在尝试创建一个数组,该数组结合了输入字段的标签和值。问题是我的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());
}
});

现在我们只对.checkboxdiv进行迭代,选择里面的标签和复选框。如果复选框被选中,我们将标签文本和复选框值推入数组。输出类似于:["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>");

最新更新