【问题标题】:Post values form an array of checkboxes从复选框数组中发布值
【发布时间】:2014-11-30 21:37:40
【问题描述】:

我已经尝试了几个小时从一组具有相同名称的复选框中获取数据。

<input type="checkbox" name="node"/>

var selectedValues = [];

             $(document.getElementsByName("node")).each(function () {
            selectedValues.push($(this).checked);
           });

            $.ajax({
                url: "/Summary/Test",
                type: "POST",
                data: selectedValues,
                traditional: true                
            });

public void Test(string [] nodes)
        {
        }

我在这里做错了什么?我不知道为什么它跳过了那条线。

【问题讨论】:

  • .each 是函数吗?
  • 是的,我尝试了 5 到 10 种方法,其中一半有 .each
  • @MihaiBratulescu -- .each 不是一个普通的 JS 函数.. 看看你的控制台,你可能有一个错误,可能是:undefined is not a function
  • 为什么不 $("#formId").serialize() ?

标签: javascript ajax model-view-controller


【解决方案1】:

如果要收集选中复选框值的数组,可以使用 mep 方法:

var selectedValues = $('[name=node]:checked').map(function() {
    return this.value;
}).get();

假设您使用的是 jQuery (?)。

或者在普通的 javascript 中几乎是一样的:

var selectedValues = [],
    nodes = document.querySelectorAll('[name=node]');

Array.prototype.slice.call(nodes).forEach(function(el) {
    if (el.checked) {
        selectedValues.push(el.value);
    }
});

AJAX:

$.ajax({
    url: "/Summary/Test",
    type: "POST",
    data: {nodes: selectedValues},
    traditional: true             
});

【讨论】:

  • 并将这个数组传递给你需要json的服务器
  • 谢谢你让我更接近答案是:var selectedValues = $(document.getElementsByName("node")).map(function () { return this.checked; }).get();
【解决方案2】:

您不能将所有复选框命名相同,只会提交最后一个值。将每一项更改为:

<input type="checkbox" name="node[]" />

这将创建一个选定值的数组。

【讨论】:

  • 据我所知,只有在不使用 ajax 时 PHP 才需要
  • 这有什么不同?他们仍然有相同的名字,但现在不同了
  • 这个答案似乎不正确(请参阅此处的注释:w3.org/TR/html401/interact/forms.html 在第 17.2.1 节中的复选框下)。在表单中提交的复选框的默认行为是在提交的表单中附加相同的名称和多个不同的值。它不会只提交最后一个。它由服务器端如何处理表单元素决定。同名的单选按钮是互斥的,但不是复选框。
猜你喜欢
  • 1970-01-01
  • 2012-09-11
  • 2010-12-06
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
相关资源
最近更新 更多