Найти количество отмеченных флажков с одинаковым идентификатором

#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