#jquery #checkbox #css-selectors
#jquery #флажок #css-селекторы
Вопрос:
У нас возникла проблема при попытке объединить селекторы вместе. Мы пытаемся установить все установленные флажки, которые имеют атрибут data-action с hideplan в качестве значения. У меня есть страница, на которой есть два флажка, одна кнопка и этот javascript на ней:
<script type="text/javascript">
var hiddenplans = $('input:checkbox[data-action="hideplan":checked');
$("#hide_btn").click(function() {
hiddenplans.each(
function(index) {
alert('checked' index);
});
});
</script>
При установке одного или нескольких флажков не отображаются никакие предупреждения — hiddenplans пуст. Однако, если мы скопируем это $('input:checkbox[data-action="hideplan":checked');
, поместим в консоль firebug и запустим, мы получим результаты, если будет установлен один или несколько флажков. Если я удалю: checked, он будет предупреждать о флажках с данными-action = hideplan.
Мы попробовали несколько разных способов написания селектора (т.Е. $("input[type=checkbox][data-action=hideplan]:checked")
и $("input[type=checkbox][data-action=hideplan]").filter(":checked");
и многое другое), и они работают в консоли, но не возвращают оповещения.
Я создал скрипт с полным кодом на случай, если мы пропустили что-то очевидное http://jsfiddle.net/xCnSs/5 /
Ответ №1:
Комментарии:
1. Не забудьте использовать тег перед большинством псевдоселекторов, в противном случае подразумевается универсальный селектор
*
, который потребуется для проверки каждого элемента на странице. :o) Из документации: «Как и в случае с другими селекторами псевдоклассов (теми, которые начинаются с «:»), рекомендуется указывать перед ним имя тега или какой-либо другой селектор; в противном случае подразумевается универсальный селектор («*»)».
Ответ №2:
Вы кэшируете выбранный набор в переменной, поэтому он будет возвращать только те элементы, которые отмечены при загрузке страницы. Переместите этот селектор в свою функцию click, и он будет работать:
$("#hide_btn").click(function () {
var hiddenplans = $("input[type=checkbox][data-action=hideplan]:checked");
hiddenplans.each(function (index) {
alert('checked' index);
});
});
Ответ №3:
Вы забыли закрывающую скобку:
$('input:checkbox[data-action="hideplan"]:checked');
Но помните, что вы также можете фильтровать результаты:
$('input:checkbox[data-action="hideplan"]').filter(':checked');
Комментарии:
1. просто опечатка. проблема не устранена. mVChr указал на проблему