【问题标题】:adding multiple checkboxes to a form element向表单元素添加多个复选框
【发布时间】:2018-03-28 15:25:50
【问题描述】:

假设:一个页面在表单元素之外有一些动态生成的复选框。

在用户选中一些复选框后,我希望将所有这些复选框(选中或未选中)附加到表单元素中,以便当用户单击“提交”按钮时,表单会考虑复选框,它们的 ID、名称、数据名称和它们的状态(选中或未选中)。这可能吗?

我在这里尝试了一个 codpen:https://codepen.io/anthonysalamin/pen/ZxvZpP?editors=1010,但到目前为止没有成功。

jQuery 代码:

//insert all checkbox input elements into the form id="reservation"
  $("#reservation").submit(function(evt) {
  // should append all checkboxes to the form
  $("<input type='checkbox' />").append("#reservation");
});

Screenshot of my codpen here

【问题讨论】:

  • 我想我的问题是: 向表单元素添加多个复选框 ID、名称和值。我实际上不希望任何“物理”复选框出现在我的表单元素中,我只想通过表单的提交按钮发送所有复选框信息。

标签: forms checkbox append


【解决方案1】:

.append() 需要文本 HTML 作为输入。您已通过 id 选择器 #reservation 代替。要在submit 事件中有效地将复选框添加到form,您可以这样做:

// wait for DOM to be ready
$( document ).ready(function() {
    //define the variable for all checkboxes on the page
    var allCheckboxes = $("input:checkbox[class=outsider]"); 
    //calls the append function on form submission
    $("#form-element").submit(function(event) {
        //insert all checkbox type elements into the form with id="form-element"
    var checkHTML = "";
    for(var checkboxIndex = 0; checkboxIndex < allCheckboxes.length; checkboxIndex++) {
      checkHTML += allCheckboxes[checkboxIndex].outerHTML;
    }
        $("#form-element").append(checkHTML);
    });
});

但是,您的意图很可能与行为不同。代码问题:

  • 您的复选框有 id,如果我们克隆它们,那么您将有重复的 id。由于如果存在重复的 id,则 HTML 无效,因此克隆带有 id 的复选框将导致 HTML 无效
  • 选中状态不会被复制,因此您需要挖掘出该值并将其放入新创建的复选框中

处理所有这些问题的代码:

// wait for DOM to be ready
$( document ).ready(function() { 
    //define the variable for all checkboxes on the page
    var allCheckboxes = $("input:checkbox[class=outsider]"); 
    //calls the append function on form submission
    $("#form-element").submit(function(event) {
        //insert all checkbox type elements into the form with id="form-element"
    var checkHTML = "";
    var checked = [];
    for(var checkboxIndex = 0; checkboxIndex < allCheckboxes.length; checkboxIndex++) {
      checked.push($(allCheckboxes[checkboxIndex]).prop('checked'));
      allCheckboxes[checkboxIndex].remove();
      checkHTML += allCheckboxes[checkboxIndex].outerHTML;
    }
        $("#form-element").append(checkHTML);
    allCheckboxes = $('input:checkbox[class=outsider]');
    console.log(checked);
    for (var checkboxIndex = 0; checkboxIndex < allCheckboxes.length; checkboxIndex++) {
      $(allCheckboxes[checkboxIndex]).prop('checked', checked[checkboxIndex]);
    }
    event.preventDefault();
    });
});

因此,如果您处理了所有问题,则可以通过克隆复选框来解决您的问题。或者,您可以使用 hidden input 放置键值对的位置,其中键将是 checkbox id,值将是它们对应的 checked 状态,并将这些值放入 hidden @ 987654334@ submit 处理程序。如果您不打算将复选框直观地放入表单中并且您对正确处理数据感到满意,那么将键值对的 JSON 值放入 valuehidden input 在比较将复选框复制到form,但这些只是细微差别。

【讨论】:

  • 非常感谢您的脚本和编写脚本所花费的时间,非常感谢!它在我的带有静态元素(复选框和表单)的 Webflow 项目中运行良好,但是当我尝试使用动态元素时,不幸的是它不再起作用,即使我使用动态字段替换了表单和复选框 ID。我不得不放弃这个项目,我迷路了——我在 webflow 论坛上也问了很多问题,但没有人能真正帮助我。这可能是我无法用代码处理的后端问题吗?
  • 如果您有兴趣和时间,请随时查看我在link 所做的 webflow 帖子。然后我使用了您更新的代码,但也在那里,在静态页面上工作,而不是在动态页面上。
  • @anthonysalamin 我查看了您的链接并阅读了一些帖子,但不幸的是我没有时间阅读所有帖子。由于我对您的实际问题只有部分了解,因此我无法确定我是否真的正确,但我认为可能存在两个问题:1.您的表单位于 iframe 内,而您的代码在 iframe 之外运行,因此确实如此找不到您的表单和复选框。 2. 你可能有一个 Javascript 错误。无论如何,首先要做的事情是:请使用浏览器的网络工具检查您的项目中是否有任何 Javascript 错误,并告诉我您看到了什么。
  • 嗨@lajosarpad,非常感谢您花时间查看我的链接!我现在确实解决了我的问题,我真的很感激!我已经从你的技术中学到了很多东西! :)
  • @anthonysalamin 欢迎您。我很高兴你设法解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
相关资源
最近更新 更多