Перебирайте таблицу html и установите флажки (JQuery)
У меня есть таблица HTML с флажком в каждой строке.
Я хочу зациклиться на таблице и посмотреть, есть ли флажки, которые отмечены.
Не работает следующее:
$("#save").click( function() {
$('#mytable tr').each(function (i, row) {
var $actualrow = $(row);
checkbox = $actualrow.find('input:checked');
console.log($checkbox);
});
Отправляет в консоли следующее:
[prevObject: jQuery.fn.jQuery.init[1], context: tr, selector: "input:checked", constructor: function, init: function…]
за строку независимо от того, установлен ли какой-либо флажок.
Обновление
Такая же проблема:
$('#mytable tr').each(function (i, row) {
var $actualrow = $(row);
$checkbox = $actualrow.find(':checkbox:checked');
console.log($checkbox);
});
Ответы
Ответ 1
Используйте это вместо:
$('#save').click(function () {
$('#mytable').find('input[type="checkbox"]:checked') //...
});
Позвольте мне объяснить вам, что делает селектор:
input[type="checkbox"]
означает, что это будет соответствовать каждому <input />
с атрибутом типа type
равным checkbox
После этого: :checked
будет соответствовать всем отмеченным флажкам.
Вы можете перебрать эти флажки с помощью:
$('#save').click(function () {
$('#mytable').find('input[type="checkbox"]:checked').each(function () {
//this is the current checkbox
});
});
Вот демонстрационная версия JSFiddle.
И вот демо, которое решает именно вашу проблему http://jsfiddle.net/DuE8K/1/.
$('#save').click(function () {
$('#mytable').find('tr').each(function () {
var row = $(this);
if (row.find('input[type="checkbox"]').is(':checked') &&
row.find('textarea').val().length <= 0) {
alert('You must fill the text area!');
}
});
});
Ответ 2
используйте .filter(':has(:checkbox:checked)'
т.е.:
$('#mytable tr').filter(':has(:checkbox:checked)').each(function() {
$('#out').append(this.id);
});
см. эту демонстрацию скриптов http://jsfiddle.net/suhailvs/tZvvB/2/
Ответ 3
Следующий фрагмент кода включает/отключает кнопку в зависимости от того, установлен ли хотя бы один флажок на странице.
$('input[type=checkbox]').change(function () {
$('#test > tbody tr').each(function () {
if ($('input[type=checkbox]').is(':checked')) {
$('#btnexcellSelect').removeAttr('disabled');
} else {
$('#btnexcellSelect').attr('disabled', 'disabled');
}
if ($(this).is(':checked')){
console.log( $(this).attr('id'));
}else{
console.log($(this).attr('id'));
}
});
});
Вот демонстрация в JSFiddle.
Ответ 4
В вашем коде отсутствует });
.
$("#save").click(function() {
$('#mytable tr').each(function (i, row) {
var $actualrow = $(row);
$checkbox = $actualrow.find('input:checked');
console.log($checkbox);
});
});