2013-08-19 14 views
15

Ho questo codice:Come mostrare/nascondere un elemento sulla casella selezionata/deseleziona gli stati usando jQuery?

<fieldset class="question"> 
     <label for="coupon_question">Do you have a coupon?</label> 
     <input class="coupon_question" type="checkbox" name="coupon_question" value="1" /> 
     <span class="item-text">Yes</span> 
    </fieldset> 

    <fieldset class="answer"> 
     <label for="coupon_field">Your coupon:</label> 
     <input type="text" name="coupon_field" id="coupon_field"/> 
    </fieldset> 

e vorrei mostrare/nascondere la fieldset "risposta" (di default è nascosta) dopo un clic sulla casella di controllo in fieldset "domanda" Come per farlo. Non ero in grado di farlo utilizzando la tecnica per un classico come elemetn:

<script> 
    $().ready(function(){ 

     $('.question').live('click',function() { 
       $('.answer').show(300); 
      } 
      , 
      function(){ 
       $('.answer').hide(200); 
      } 
     ); 

    }); 
</script> 

Qualcuno potrebbe aiutarmi come farlo utilizzando casella di controllo? Inoltre, se possibile, deselezionare (deselezionare) la casella di controllo quando è nascosta.

+0

: si prega di prendere nota che .live() è deprecato dalla versione 1.7 di jQuery, invece di usare .on() come indicato nella risposta di Arun – zamil

risposta

26

Fissare onchange evento per la casella di controllo:

<input class="coupon_question" type="checkbox" name="coupon_question" value="1" onchange="valueChanged()"/> 

<script type="text/javascript"> 
function valueChanged() 
{ 
    if($('.coupon_question').is(":checked")) 
     $(".answer").show(); 
    else 
     $(".answer").hide(); 
} 
</script> 
3

Prova

$(document).ready(function(){ 
    //Register click events to all checkboxes inside question element 
    $(document).on('click', '.question input:checkbox', function() { 
     //Find the next answer element to the question and based on the checked status call either show or hide method 
     $(this).closest('.question').next('.answer')[this.checked? 'show' : 'hide']() 
    }); 

}); 

Demo: Fiddle

O

$(document).ready(function(){ 
    //Register click events to all checkboxes inside question element 
    $(document).on('click', '.question input:checkbox', function() { 
     //Find the next answer element to the question and based on the checked status call either show or hide method 
     var answer = $(this).closest('.question').next('.answer'); 

     if(this.checked){ 
      answer.show(300); 
     } else { 
      answer.hide(300); 
     } 
    }); 

}); 
+0

L'esempio è troppo complicato (nei termini che è molto difficile capire per un principiante; anche se è probabilmente un pezzo di codice efficiente), potresti commentare per favore. Ho bisogno di eseguire cose diverse, tranne mostrare e nascondere. È questo l'unico modo per fare la cosa che voglio fare? – dmn77

+0

@ dmn77 vedere l'aggiornamento –

1
$(document).ready(function() { 
    $(document).on("click", ".question", function(e) { 
     var checked = $(this).find("input:checkbox").is(":checked"); 
     if (checked) { 
      $('.answer').show(300); 
     } else { 
      $('.answer').hide(300); 
     } 
    }); 
}); 
26

Prova questa

$(".answer").hide(); 
$(".coupon_question").click(function() { 
    if($(this).is(":checked")) { 
     $(".answer").show(300); 
    } else { 
     $(".answer").hide(200); 
    } 
}); 

FIDDLE

+0

+1 per nascondersi con jquery anziché display: nessuno; in css. Questo sembra essere il modo corretto, nel caso in cui qualche utente potrebbe avere disabilitato js. – Diego

+0

@EswaraReddy, +1, questa è la migliore risposta che ho trovato finora – lmiguelvargasf

+0

@lmiguelvargasf Grazie. –

1

provare questo

<script> 
    $().ready(function(){ 
     $('.coupon_question').live('click',function() 
     { 
      if ($('.coupon_question').is(':checked')) { 
       $(".answer").show(); 
      } else { 
       $(".answer").hide(); 
      } 
     }); 
    }); 
</script> 
5

più semplice - e ho cambiato la classe casella di controllo per ID così:

$(function() { 
 
    $("#coupon_question").on("click",function() { 
 
    $(".answer").toggle(this.checked); 
 
    }); 
 
});
.answer { display:none }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<fieldset class="question"> 
 
    <label for="coupon_question">Do you have a coupon?</label> 
 
    <input id="coupon_question" type="checkbox" name="coupon_question" value="1" /> 
 
    <span class="item-text">Yes</span> 
 
</fieldset> 
 

 
<fieldset class="answer"> 
 
    <label for="coupon_field">Your coupon:</label> 
 
    <input type="text" name="coupon_field" id="coupon_field" /> 
 
</fieldset>

Problemi correlati