【问题标题】:Combine checkbox values into string before submitting form在提交表单之前将复选框值组合成字符串
【发布时间】:2013-07-29 22:35:40
【问题描述】:

我正在向我访问受限的外部服务器发送表单。我有一个表单,其中包含用户感兴趣的不同产品的许多复选框。我需要将它们发送到一个字符串中,列出他们检查的所有产品。

我知道我需要使用 JavaScript 来捕获选择并将它们组合成一个变量,然后通过 POST 将其发送到外部服务器。我在 Javascript 方面不是很有经验,不知道具体如何。

【问题讨论】:

  • 服务器期望数据的格式是什么?只是一串名称-值对,还是像下面阿姆斯特丹讨论的那样采用 JSON 格式?
  • 实际上我将它发送到销售队伍服务器,所以我只需要在逗号分隔的字符串中输入选中复选框的名称:“产品 A,产品 D,产品 F”。另外,我从来没有使用过 JSON 来发布表单。

标签: javascript forms post


【解决方案1】:

我只是给你一个提示,告诉你在提交表单后如何赶上选中的复选框 (DEMO)。

假设您有以下 html:

<form id="testForm">
    <input class="checkbox" name="one" type="checkbox">
    <input class="checkbox" name="two" type="checkbox">
    <input class="checkbox" name="three" type="checkbox">
    <input type="hidden" name="checkboxStr" id="checkbox_str">
    <button>Send</button>
</form>

您可以在表单提交中添加事件监听器:

var form = document.getElementById('testForm');

try {
    form.addEventListener("submit", submitFn, false);
} catch(e) {
    form.attachEvent("onsubmit", submitFn); //IE8
}

然后您可以获得所有需要的复选框,例如其类名。 循环遍历它们并将选中的那些添加到一个数组中,然后再加入一个字符串。

function submitFn(event) {
    event.preventDefault();
    var boxes = document.getElementsByClassName('checkbox');
    var checked = [];
    for(var i=0; boxes[i]; ++i){
      if(boxes[i].checked){
        checked.push(boxes[i].name);
      }
    }

    var checkedStr = checked.join();

    document.getElementById('checkbox_str').value = checkedStr;
    form.submit();

    return false;
}

您现在可以通过 ajax 发送此字符串,或者您可以添加一个隐藏的表单字段并将字符串设置为其值,然后在不使用 ajax 的情况下提交表单。

【讨论】:

  • 我更喜欢 if (form.addEventListener) { ... } else { ... } 而不是 try-catch 块
  • 你能解释一下为什么吗? :)
  • 我确定这是一个愚蠢的错误,但经过努力我无法让脚本设置隐藏字段的值... oyy
  • 希望贴个地址不粗俗,不过我的页面在www.megadyne.com/new/samples.php 可以看到代码。
  • @MarcelGwerder 考虑一下 try-catch 是如何实现的以及引发异常的成本。原始的 if 语句要简单得多。另外,我更喜欢使用 try-catch 来处理错误条件,我不认为这符合条件。
【解决方案2】:

首先,您需要获取名称值对并将它们存储到一个对象中:

var obj = {}; // this will hold your name value pairs

您可以从那里使用 JSON 将数据发送到服务器。 JSON数据在发送到服务器时是字符串形式的。

var json_string = JSON.stringify(obj);

【讨论】:

  • 也许您应该解释如何获取名称-值对。他说他没有经验
  • (打断)对不起,先生。
猜你喜欢
  • 2016-07-24
  • 1970-01-01
  • 2018-09-27
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多