2015-07-08 2 views
-3

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

if ($("input[type=radio]:checked#rd1").length > 0) { 
     // do something 
    } else if ($("input[type=radio]:checked#rd2").length > 0) { 
     // do something 
    } else if ($("input[type=radio]:checked#rd3").length > 0) { 
     // do something 
    } 

я попытался сделать следующее:

if ($("input[type=radio]:checked#rd1"||"input[type=radio]:checked#rd2").length > 0) {...} 

и я получил предупреждение сказать, что это было "эвристический недостижимо.

В любом случае, это более компактно?

EDIT: Если отмечены # rd1/# rd2/# rd3, все они выполняют то же самое. // что-то в этом случае означает одинаковый результат для каждого переключателя. Поэтому я хотел бы сделать оператор if более кратким, поскольку он приводит к одному и тому же результату для каждого «проверенного».

+2

, '' вместо «||» 'является правильным syntaxis;) – lmgonzalves

+2

Поскольку существует только одна радиостанция, которая может быть проверена в каждой группе, почему вы не просто связать событие изменения и проверить идентификатор в обработчике? BTW, потому что идентификаторы должны быть уникальными в контексте документа, этого, например, было бы достаточно в качестве селектора: '# rd1: checked'. Тем не менее, вы могли бы предоставить весь соответствующий код в вопросе как HTML-разметку и ожидаемое поведение («сделать что-то»), чтобы сделать ваш вопрос более ясным. EDIT: теперь я просто удивляюсь, что '// что-то делает то же самое для всех ??? –

+0

Почему бы не 'if ($ (" input [type = radio]: checked "). Length> 0) {' вместо всех ваших операторов 'if'. Если у вас нет чужого 'input [type = radio]', то должно работать. – lmgonzalves

ответ

2

Судя по тому, что вы делали раньше: это должно исправить то, что вы пробовали.

if ($("input[type=radio]:checked#rd1").length > 0 
    ||$("input[type=radio]:checked#rd2").length > 0 || $("input[type=radio]:checked#rd3").length > 0) { 
     // do something 
} 

Есть другие способы сделать это эффективно в JQuery, например, используя имя.

if ($("input[name='name']").is(':checked')) { 
    //do something 
} 

или через имя класса

if($("input:radio[class='className']").is(":checked")) { 
    //do something   
} 
+0

Это отлично работало, конечно, мне нужно было включить все заявление. Спасибо! –

+2

@foreverlearning: Это отличается от вашего исходного кода. Теперь он делает то же самое «// делаем что-то» для всех 3 случаев. Вы уверены, что это то, что вы хотите? –

+0

@foreverlearning Тогда это было бы более «компактным»: '$ (': radio [id^= rd]: checked'). Length' НО, если это действительно то, что вы ищете, ваш вопрос не имеет смысла ... –

2

Там нет необходимости длительного выбора, поскольку идентификаторы должны быть уникальными. Кроме того, 0 ложна в этом случае, так что вы можете обрезать его и просто это ...

if ($("#rd1:checked").length) { 
    // do something 
} 
else if ($("#rd2:checked").length) { 
    // do something 
} 
else if ($("#rd2:checked").length) { 
    // do something 
} 

Так как вы подтвердили, что // do something одинакова во всех сценариях, я бы изменить его это ...

if ($("#rd1:checked, #rd2:checked, #rd3:checked").length) { 
    // do something 
} 
Смежные вопросы