#jquery
#jquery
Вопрос:
У меня ужасная проблема, когда я пытаюсь увидеть, нажат ли какой-либо из флажков, использующих определенный идентификатор.
Примером флажков являются
<input name="our_list[]" value="AB1-A" type="checkbox" class="listheck" id ="AB1 OB 90xs r5Ty" />
<input name="our_list[]" value="AB1-B" type="checkbox" class="listheck" id ="AB1 OB 90xs r5Ty" />
<input name="our_list[]" value="AB1-C" type="checkbox" class="listheck" id ="AB1 OB 90xs r5Ty" />
<input name="our_list[]" value="AB1-D" type="checkbox" class="listheck" id ="AB1 OB 90xs r5Ty" />
<input name="our_list[]" value="AB2-A" type="checkbox" class="listheck" id ="AB2 OB 90xs r5Ty" />
<input name="our_list[]" value="AB2-B" type="checkbox" class="listheck" id ="AB2 OB 90xs r5Ty" />
<input name="our_list[]" value="AB2-C" type="checkbox" class="listheck" id ="AB2 OB 90xs r5Ty" />
<input name="our_list[]" value="AB2-D" type="checkbox" class="listheck" id ="AB2 OB 90xs r5Ty" />
и мой последний скрипт
<script type="text/javascript">
$(document).ready(function() {
$('.listheck').click(function(){
var thisID = $(this).attr('id');
var checked = $('#' thisID ':checkbox:checked').length;
alert(thisID " Number checked:" checked);
});
});
</script>
В предупреждении отображается идентификатор флажка, но отмеченное значение всегда равно 0, даже если они отмечены
Я знаю, что идентификатор каждого элемента должен быть уникальным, и это может быть проблемой, или может быть, в идентификаторе есть пробелы, но это для системы, которая уже разработана кем-то другим, и, к сожалению, я не могу изменить способ ее работы.
Я перепробовал здесь много разных решений, но, похоже, ни одно из них не делает то, что мне нужно.
Любая помощь приветствуется
Комментарии:
1. Идентификаторы должны быть уникальными. используйте для этого имена классов. пример: class=»listheck AB1″
2. Почему несколько элементов имеют одинаковый идентификатор?
3. И зачем вам нужно искать их по идентификатору? У вас уже есть элемент, на который был нажат щелчок
$(this)
. Просто проверьте, установлен ли флажок.4. Отсутствие уникальности в идентификаторах вызовет у вас проблемы при написании сценариев против них. Вы должны заставить любого, кто подходит, исправить исходную систему, поскольку в долгосрочной перспективе это сделает вашу жизнь намного проще. В краткосрочной перспективе будут найдены обходные пути для всего, что вы найдете, но это сделает весь ваш код намного более запутанным и сложным в обслуживании, чем должно быть.
Ответ №1:
Идентификаторы должны быть уникальными. Но если вы не можете изменить код, это должно сработать:
$(document).ready(function() {
$('.listheck').click(function(){
var checkedTotal = {};
$(".listheck").each(function(index, el) {
var id = $(el).attr("id");
if ( $(el).prop("checked") ) {
if ( !checkedTotal[id] ) {
checkedTotal[id] = 1;
}
else {
checkedTotal[id] = checkedTotal[id] 1;
}
}
});
var msg = "";
for ( var p in checkedTotal ) {
msg = p " # Checked: " checkedTotal[p] "n";
}
alert(msg);
});
});
Ответ №2:
Вместо поиска по идентификатору. Попробуйте найти что-нибудь еще, что группирует эти флажки. попробуйте найти по name
атрибуту вместо id
. Jquery использует метод js, который ожидает, что только один элемент будет иметь определенный идентификатор в соответствии со спецификацией. Так что, вероятно, он возвращает только первый. Используйте другой селектор, отличный от id, если вы не можете исправить структуру.
Ответ №3:
Этот код будет проверять только первый элемент с заданным id
значением (поскольку id
он уникален для элементов). На самом деле, если вы попробуете это здесь, вы получите результат, в котором в данный момент установлен только один флажок.
Вместо этого вы можете использовать .each
метод для перебора всех установленных в данный момент флажков и подсчета того, сколько из них имеют заданный id
.
$(document).ready(function() {
$('.listheck').click(function(){
var thisID = $(this).attr('id');
var checked = 0;
$('.listheck:checked').each(function(index, val) {
if ($(this).attr('id') == thisID) {
checked ;
}
});
alert(checked ' checkbox with id ' thisID ' are checked');
});
});
Смотрите рабочий пример здесь
Ответ №4:
$('[id="AB1 OB 90xs r5Ty"]').length
Комментарии:
1. Не могли бы вы рассказать о своем решении.
2. если вы хотите найти количество флажков с одинаковым идентификатором, используйте тег [id=»»] .Пример длины с предупреждением: alert($(‘[id=»AB1 OB 90xs r5Ty»]’).длина); Результат: 4