>>Вы знаете, чем отличается '#attribute' от '.attribute' в jQuery и как будет происходить выборка?
да, знаю.
jquery здесь не при чем, в своем предыдущем ответе я привел код jquery который возвращает все выбранные элементы, айди поля для группы чекбоксов ставится не на чекбокс а на парент div.
проблема именно в activeform
если вы посмотрите код activeform.js то увидите, что jquery там абсолютно не при чем, более того activeform ожидает там айди аттрибуда без решетки. и айди на всю чекбокс группу один.
Код: Выделить всё
// find an attribute config based on the specified attribute ID
find: function (id) {
var attributes = $(this).data('yiiActiveForm').attributes,
result = undefined;
$.each(attributes, function (i) {
if (attributes[i]['id'] == id) {
result = attributes[i];
return false;
}
});
return result;
},
так вот value найденного аттрибута содежит не массив, а value первого выбранного ченкбокса в группе.
и несмотря на то, что findInput
Код: Выделить всё
....
var findInput = function ($form, attribute) {
var $input = $form.find(attribute.input);
if ($input.length && $input[0].tagName.toLowerCase() === 'div') {
// checkbox list or radio list
return $input.find('input');
} else {
return $input;
}
};
....
вернет всю группу
метод getValue по ней вернет ровно одно значение
Код: Выделить всё
....
var getValue = function ($form, attribute) {
var $input = findInput($form, attribute);
var type = $input.attr('type');
if (type === 'checkbox' || type === 'radio') {
var $realInput = $input.filter(':checked');
if (!$realInput.length) {
$realInput = $form.find('input[type=hidden][name="' + $input.attr('name') + '"]');
}
return $realInput.val();
} else {
return $input.val();
}
};
....
это значение потом используется в коде валидации например, так что валидация для чекбокслиста скорее всего тоже отработает некорректно.