输入Checkbox + DataTables + Jquery有时会返回“on”而不是输入值

时间:2017-01-31 13:29:54

标签: javascript jquery datatables

我在生产环境中遇到错误,无法在开发环境中重现它,所以我认为这是浏览器的问题。

我有一个DataTable填充了服务器端进程和一个自定义列,这是一个复选框,这是简化的代码:

$("#data-table").DataTable({        
    "serverSide" : true,
    "ajax" : {
        "url" : "/list",
        "dataSrc" : "data"
    },
    "columns" : [{
            "data" : function(row) {
                return '<input class="id-checkbox" type="checkbox" name="ids[]" value="' + row.id + '">';
            },
            "class" : "text-center",
            "orderable" : false
        },{
            "data" : "name",
            "class" : "text-center",
            "orderable" : false
        }]
    });

然后我有一些jQuery代码,而不是点击一个按钮,然后获取所选项目并将其发布到后端服务器:

$("#button").on("click", function(){

    var ids = [];

    $('input[type=checkbox]:checked').each(function() {
        ids.push(this.value);
    });

    if (ids.length == 0) {
        //POST Ajax request to server
    }
});

问题是,ids数组有时会填充一些ID,而某些“on”字则会填充,因此我的后端会在等待Long数组时爆炸。这是一个示例堆栈跟踪:

Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long[]'; 
nested exception is java.lang.NumberFormatException: 
For input string: "109287,109286,109273,108820,on,on"

有没有人知道发生了什么?

2 个答案:

答案 0 :(得分:1)

“on”将是没有值属性的复选框的值:

<input id="i" type="checkbox">

如果您记录此输入的值,您至少会在Firefox中获得"on"

console.log(document.getElementById('i').value);

检查脚本生成的HTML。也许,一些复选框错过了值属性。也许,因为row.id有时不存在,作为一个想法。

答案 1 :(得分:0)

正如@kodecount评论的那样,问题是同一页面上存在另一个输入复选框,通过添加

解决
input[name^=ids]:checked