【问题标题】:swapping checkboxes in PHP using javascript使用 javascript 在 PHP 中交换复选框
【发布时间】:2021-08-08 03:53:02
【问题描述】:

尝试使用来自超链接的 javascript 在 PHP 中触发两个复选框数组的值。我面临的问题是 php 希望复选框数组使用 [ ] 而 javascript 没有。

这是我的代码...您建议使用什么代码在 checkbox2 = checkbox1 AND checkbox1 = checkbox2 中制作选中的项目?

<a id='swap' href=\"javascript: swapContacts();\">Swap</a>
<br>
<input class='c_contactmethods' type='checkbox' name='checkbox1[]' value='1'>Phone<br>
<input class='c_contactmethods' type='checkbox' name='checkbox1[]' value='2'>Email<br>
<input class='c_contactmethods' type='checkbox' name='checkbox1[]' value='3'>Text<br>
<input class='c_contactmethods' type='checkbox' name='checkbox1[]' value='4'>Mail<br>
<br>
<input class='c_co_contactmethods' type='checkbox' name='checkbox2[]' value='1'>Phone<br>
<input class='c_co_contactmethods' type='checkbox' name='checkbox2[]' value='2'>Email<br>
<input class='c_co_contactmethods' type='checkbox' name='checkbox2[]' value='3'>Text<br>
<input class='c_co_contactmethods' type='checkbox' name='checkbox2[]' value='4'>Mail<br>

我需要关于 javascript 中 swapContacts() 代码的帮助。这是我正在尝试使用的:

var i=0;    
for (i=0;i<document.form1.checkbox1.length;i++){
    $tempstr = document.form1.checkbox1[i].value;
    document.form1.checkbox1[i].value= document.form1.checkbox2[i].value;
    document.form1.checkbox2[i].value= $tempstr;
}

【问题讨论】:

  • 您能否分享您尝试过的代码并准确解释您遇到了什么问题?
  • 按您的要求添加了 JavaScript 代码。我知道我是一个小丑,只需要你发布我可以用来从 checkbox1 数组和 checkbox2 数组交换选中框的 javascript 代码。

标签: javascript php arrays checkbox


【解决方案1】:

类似的东西?

const buttonSwap = document.getElementById('swap')
  ,   checkbox1n = document.querySelectorAll('input[name="checkbox1[]"]')
  ,   checkbox2n = document.querySelectorAll('input[name="checkbox2[]"]')
  ;
buttonSwap.onclick = () =>
  {
  let c1 = [...checkbox1n].map(cb=>cb.checked)
  let c2 = [...checkbox2n].map(cb=>cb.checked)
  checkbox1n.forEach((cb,i)=>cb.checked = c2[i])
  checkbox2n.forEach((cb,i)=>cb.checked = c1[i])
  }
<button id="swap" type="button" >Swap</button>
<br>
 <label><input class='c_contactmethods' type='checkbox' name='checkbox1[]' value='1'>Phone</label><br>
 <label><input class='c_contactmethods' type='checkbox' name='checkbox1[]' value='2'>Email</label><br>
 <label><input class='c_contactmethods' type='checkbox' name='checkbox1[]' value='3'>Text</label><br>
 <label><input class='c_contactmethods' type='checkbox' name='checkbox1[]' value='4'>Mail</label><br>
 <br>
 <label><input class='c_co_contactmethods' type='checkbox' name='checkbox2[]' value='1'>Phone</label><br>
 <label><input class='c_co_contactmethods' type='checkbox' name='checkbox2[]' value='2'>Email</label><br>
 <label><input class='c_co_contactmethods' type='checkbox' name='checkbox2[]' value='3'>Text</label><br>
 <label><input class='c_co_contactmethods' type='checkbox' name='checkbox2[]' value='4'>Mail</label><br>

【讨论】:

  • 这要求您单击两次swap,然后触发器与表单上的其他一些字段不同步。这是我最接近完成这项工作的一次。有什么建议让它在第一次点击时交换?
  • @maybeahackbutitworks 我不建议使用 href 链接进行此类操作。而且您没有表明这是在表单中发生的,这是一个重要信息,我更改了代码以使其正常工作
  • @maybeahackbutitworks 您也可以考虑在您的代码中添加一些 &lt;label&gt; 以使任何点击文本以更改您的复选框的开/关(请参阅我的代码)
【解决方案2】:

您可以遍历项目,检查set1set2是否检查了当前索引的项目。

如果未选中,请选中另一个。反之亦然。

function swapContacts() {
  let set1 = document.querySelectorAll('input[name="checkbox1[]"]');
  let set2 = document.querySelectorAll('input[name="checkbox2[]"]');
  
  for(i=0; i<Math.min(set1.length, set2.length); i++) {
    const checkSet1 = set2[i].checked;
    const checkSet2 = set1[i].checked;
    
    set1[i].checked = checkSet1 ? "checked" : "";
    set2[i].checked = checkSet2 ? "checked" : "";
  }
  
  return false;
}
<a id='swap' href="#" onclick="swapContacts(); return false;">Swap</a>
<br>
<input class='c_contactmethods' type='checkbox' name='checkbox1[]' value='1'>Phone<br>
<input class='c_contactmethods' type='checkbox' name='checkbox1[]' value='2'>Email<br>
<input class='c_contactmethods' type='checkbox' name='checkbox1[]' value='3'>Text<br>
<input class='c_contactmethods' type='checkbox' name='checkbox1[]' value='4'>Mail<br>
<br>
<input class='c_co_contactmethods' type='checkbox' name='checkbox2[]' value='1'>Phone<br>
<input class='c_co_contactmethods' type='checkbox' name='checkbox2[]' value='2'>Email<br>
<input class='c_co_contactmethods' type='checkbox' name='checkbox2[]' value='3'>Text<br>
<input class='c_co_contactmethods' type='checkbox' name='checkbox2[]' value='4'>Mail<br>

【讨论】:

    【解决方案3】:

    function swapContacts() {
      let chks1 = document.querySelectorAll("input[name='checkbox1[]']");
      let chks2 = document.querySelectorAll("input[name='checkbox2[]']");
    
      let tmp
      for (let i = 0; i < chks1.length; i++) {
        // store val from 1
        tmp = chks1[i].checked;
        chks1[i].checked = chks2[i].checked;
        chks2[i].checked = tmp;
    
        //console.log(chks1[i], chks2[i]);
      }
    }
    <a id='swap' href="javascript:void(0)" onclick="swapContacts();">Swap</a>
    <br>
    <input class='c_contactmethods' type='checkbox' name='checkbox1[]' value='1'>Phone<br>
    <input class='c_contactmethods' type='checkbox' name='checkbox1[]' value='2'>Email<br>
    <input class='c_contactmethods' type='checkbox' name='checkbox1[]' value='3'>Text<br>
    <input class='c_contactmethods' type='checkbox' name='checkbox1[]' value='4'>Mail<br>
    <br>
    <input class='c_co_contactmethods' type='checkbox' name='checkbox2[]' value='1'>Phone<br>
    <input class='c_co_contactmethods' type='checkbox' name='checkbox2[]' value='2'>Email<br>
    <input class='c_co_contactmethods' type='checkbox' name='checkbox2[]' value='3'>Text<br>
    <input class='c_co_contactmethods' type='checkbox' name='checkbox2[]' value='4'>Mail<br>

    【讨论】:

    • 赢家,赢家,鸡肉晚餐!非常感谢你。像魅力一样工作。干杯!
    猜你喜欢
    • 2012-05-13
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多