2013-05-20 2 views
4

Я пытаюсь проверить, проверяются ли все видимые флажки в определенной серии, и я думал просто подсчитать видимые и те, которые видны и проверены, чтобы проверить, совпадают ли эти числа. Проблема в том, что я не могу заставить видимые и проверенные селектора работать.jQuery: как я могу выбрать только отмеченные и отмеченные флажки?

Вот некоторые из идей, которые я имел, но не работали:

if($j("input[id^='chk_camp']:visible:checked").length == $j("input[id^='chk_camp']:visible").length) 

обе стороны 0 в этом случае

if($j("input[id^='chk_camp']").filter(':visible').filter(':checked').length == $j("input[id^='chk_camp']").filter(':visible').length) 

также вернулся 0 с обеих сторон.

также попытался

if($j("input[id^='chk_camp'][visible][checked]").length == $j("input[id^='chk_camp'][visible]").length) 

и это также возвращает 0 с обеих сторон.

В качестве примечания $j("input[id^='chk_camp']").length возвращает правильное значение. Также браузером, с которым я работаю, является Firefox.

Что я здесь делаю неправильно?

Ответ: Порой то, что я делаю неправильно, находится где-то в другом месте. Я делал эти проверки перед тем, как сделать div, содержащий флажки, видимыми, чтобы все проверки видимости возвращали false.

+1

код работает правильно для меня. Посмотрите на это [FIDDLE] (http://jsfiddle.net/mojtaba/yerpm/1/). Возможно, вы допустили ошибку в другом месте. –

+0

@NOX Да, я сделал что-то неправильно. Я сделал проверки до того, как я сделал контейнер div видимым, чтобы они, очевидно, вернули false на видимую проверку. – Bogdan

ответ

4

Вы могли бы сделать что-то вроде этого:

jsfiddle

JQuery:

$('input').each(function() { 

    // If input is visible and checked... 
    if ($(this).is(':visible') && $(this).prop('checked')) { 

     $(this).wrap('<div />'); 

    } 

}); 

HTML:

<input type="checkbox" checked="checked"> 
<input type="checkbox" checked="checked" style="display: none;"> 
<input type="checkbox"> 
<input type="checkbox" checked="checked" style="display: none;"> 
<input type="checkbox" checked="checked"> 
<input type="checkbox"> 

CSS:

div { float: left; background: green; } 
div input { display: block !important; } 
+0

Я отмечу это как ответ, так как это хорошее решение, когда селектора действительно не будут работать. Даже в том, что касается моей конкретной проблемы, в другом месте, ваш ответ был бы действительным, если бы селектора действительно виноваты. – Bogdan

2

Это неверно:

if($j("input[id^='chk_camp']").filter(':visible').filter(':checked).length == $j("input[id^='chk_camp']).filter(':visible').length) 
//               ------^------ missing qoutes here  ----^--- also double quotes here 
+0

неправильный, извините. Спасибо за головы, я исправлю это сразу. – Bogdan

+1

@Bogdan: Код, похоже, работает [** Fiddle **] (http://jsfiddle.net/hN28E/). Убедитесь, что флажок установлен правильно. –

+0

Ух, хорошо это смущает.Они действительно работают, проблема в том, что я делал все проверки, прежде чем я на самом деле сделал контейнерный div видимым, поэтому, конечно, все они вернулись 0, так как ни один из них не был видимым в то время ... – Bogdan

6

Это прекрасно работает для меня.

$(".inputClass:checked:visible"); 
$(".inputClass:checked:visible").length; 

ИЛИ адаптировав приведенный выше ответ.

jsfiddle

$('input:visible:checked').each(function() { 
    $(this).wrap('<div />'); 
}); 
Смежные вопросы