2013-04-20 4 views
1

Я хочу, чтобы текстовое поле имени пользователя отображалось, когда были выбраны op1 и op2, и оба текстовых поля, если выбрано op3. У меня странная ошибка, на которой будет выбран любой переключатель, всегда будет отображаться поля ввода имени пользователя и пароля. Почему это происходит?Strange jQuery radio button показать/скрыть ошибку

HTML:

<div>Please select operation:<br /> 
    <input type="radio" id="op1" name="op" value="check_username">Check Username<br /> 
    <input type="radio" id="op2" name="op" value="find_profile">Find Profile<br /> 
    <input type="radio" id="op3" name="op" value="check_credentials">Check Credentials 
</div><br /> 

<div id="un">Username:<br /><input type="text" /></div> 
<div id="pwd">Password:<br /><input type="text" /></div> 

JQuery:

$(document).ready(function() { 
    $('#un, #pwd').hide(); 
    $('input[name="op"]').prop('checked', false); 
    $("input[type=button]").attr("disabled", "disabled"); 

    $('input:radio[name=op]').change(function() { 
     var op = $('input:radio[name=op]:checked').val(); 
     alert(op); 
     switch(op) { 
      case 'check_username': 
      $('#un').show(); 
      $('#pwd').hide(); 
      case 'find_profile': 
      $('#un').show(); 
      $('#pwd').hide(); 
      case 'check_credentials': 
      $('#un, #pwd').show(); 
     } 
    }); 
}); 
+0

делает предупреждение работу? – Vahan

+0

было бы лучше, если бы вы могли привязать переключатели по ID, потому что в противном случае все дерево DOM будет повторяться, чтобы найти все типы радиовходов. Ничего серьезного, но было бы намного чище без необходимости использовать предложения switch. – dinukadev

+0

Вы говорите, что я должен переключиться, используя случаи ID # op1 # op2 # op3 'вместо использования .val() в качестве случаев? –

ответ

2

Вы упускаете break заявления после каждого из ваших case заявлений. Это working fine после того, как я их добавил!

+0

О, боже мой! Это поставило проблему. Огромное спасибо. –

+0

Удивительный! Если это то, что вы искали, пожалуйста, отметьте как принятый ответ! :) –

+0

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

0

ты забыл 'перерыв' в каждом конкретном случае:

switch(op) { 
     case 'check_username': 
     $('#un').show(); 
     $('#pwd').hide(); 
     break; 
     case 'find_profile': 
     $('#un').show(); 
     $('#pwd').hide(); 
     break; 
     case 'check_credentials': 
     $('#un, #pwd').show(); 
     break; 
    }