Когда вы вызываете функцию jQuery $()
со строкой селектора, она возвращает объект jQuery, который похож на массив , даже если только 1 или 0 элементов соответствуют . Итак, ваш код:
row = $('tr[name*="'+checked.attr("name")+'"]');
row.style.backgroundColor="#FFFF33";
Не работает, потому что row
это , а не элемент DOM со свойством style
, это объект jQuery, который похож на массив с большим количеством дополнительных методов. Доступ к отдельным совпадающим элементам DOM можно получить с помощью записи в стиле массива, например:
row[0].style.backgroundColor = "#FFFF33";
Будет работать для обновления первого соответствующего элемента DOM. Если ничего не найдено, то row[0]
будет неопределенным, и вы получите ошибку. row.length
скажет вам, сколько элементов соответствует.
В вашем коде:
var checked = $("input[@type=checkbox]:checked");
Вам не нужен символ @
для сопоставления имен атрибутов, поэтому "input[type=checkbox]:checked"
в порядке, но "input:checkbox:checked"
проще.
Итак, наконец-то дойдем до вашего фактического требования, , когда один ряд имеет флажок, чтобы установить желтый цвет фона этой строки, но если несколько строк имеют флажки, чтобы установить фон всех этих строк. на синий, вы можете сделать это только с тремя строками кода:
// reset all trs to default color
$("tr").css("background-color", "yourdefaultcolorhere");
// select the checked checkboxes
var checked = $("tr input:checkbox:checked");
// set the checked checkboxes' parent tr elements' background-color
// according to how many there are
checked.closest("tr").css("background-color",
checked.length===1 ? "yellow" : "blue");
Обратите внимание, что вам вообще не нужно выбирать по атрибуту name
, потому что метод .closest()
jQuery позволит вам найти элементы tr, к которым принадлежат отмеченные флажки.
РАБОЧАЯ ДЕМО: http://jsfiddle.net/FB9yA/