2017-01-31 2 views
0

У меня ошибка в рабочей среде и не могу воспроизвести ее в среде dev, поэтому я думаю, что это вопрос браузеров.Ввод Checkbox + DataTables + Jquery иногда возвращает «on» вместо входного значения

У меня есть 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 массив заполняется с некоторыми идентификаторами, а некоторые «на» слово, так что тогда мои серверные взрывается, как ждет, когда массив из Long. Вот пример stacktrace:

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" 

У кого-нибудь есть идеи, что происходит?

+1

Это, возможно, придется делать с 'ввода [тип = флажок]: checked', как он не уникален, и вы можете получить флажок, не связанный с тем, что вам нужно. – thekodester

+1

Вы можете попробовать 'input [name^= ids]: checked' Я считаю, что это должно работать, чтобы сделать его более конкретным – thekodester

+0

Будет добавлено больше спецификаций для селектора. –

ответ

0

Как @kodecount прокомментировал, проблема была присутствие другого входного флажка на той же странице, решена путем добавления

input[name^=ids]:checked 
1

«на» будет значение флажка, который не имеет значения атрибута:

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

Если при входе значение этого входа, вы получите "on" по крайней мере, в Firefox:

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

Проверьте, какой HTML-код генерируется вашим скриптом. Возможно, некоторые флажки пропускают атрибуты значения. Может быть, потому что row.id иногда нет, как идея.

+0

Да, понимайте это, но как и идентификатор созданного объекта, он всегда присутствует. По крайней мере, в модели. Я не могу воспроизвести, если DataTable иногда возвращает данные. –