2010-11-17 9 views
0

J'essaie de détecter lorsqu'une case n'est pas cochée et si le champ correspondant ci-dessous (avec un ID) a une valeur, videz-le.Déterminez quand une case est décochée et effacez un champ

Des idées?

Je travaille avec ce qui suit, mais il ne fonctionne pas:

$('#end_date_specified').click(function() { 
$('#end_date_datepicker, #end_date_datepicker_altfield').empty(); 
$('#datediv').toggle(); 
}); 

Je pense que l'un des problèmes avec c'est qu'il videra les valeurs de champ, peu importe la façon dont la case est cliqué.

+0

Qu'entendez-vous par "vide"? Décocher? Pouvons-nous voir votre HTML? – lonesomeday

Répondre

1

Je pense c'est ce que vous voulez:

$('#end_date_specified').change(function() { 
    if(!this.checked) { 
    $('#end_date_datepicker, #end_date_datepicker_altfield').val(''); 
    } 
    $('#datediv').toggle(this.checked); 
}); 

Seulement sur change (mieux que clicked pour obtenir le bon état) nous ne clair si ce n'est pas .checked, nous montrons la base #datediv si c'est vérifié (montrer si c'est le cas, masquer si ce n'est pas le cas) en utilisant .toggle(bool).

+0

L'événement 'change' est uniquement déclenché lorsque l'élément d'entrée perd le focus (et la nouvelle valeur/état diffère de l'ancien). Généralement, lorsque vous cliquez sur une case à cocher, l'élément conserve le focus jusqu'à ce que vous cliquiez ailleurs sur la page. L'utilisation de l'événement 'click' au lieu de l'événement' change' est plus intuitif pour les cases à cocher et les boutons radio. – BalusC

+0

@BalusC - jQuery normalise l'événement 'change' pour se comporter comme prévu ici, et' click' est mauvais à utiliser car vous obtiendrez l'état * précédent * dans de nombreux cas. Essayez-le vous-même: http://www.jsfiddle.net/nick_craver/C64P5/ –

+0

Oh, jQuery le normalise? Je n'ai jamais su ça. Est-ce spécifié quelque part? En passant, comment faire pour obtenir l'état précédent dans de nombreux cas? Si une case est cochée, son état est modifié de toute façon. – BalusC

0

À l'heure actuelle, vous allez effacer ce div n'importe quoi, comme vous le dites. Ce que vous voulez faire est de vérifier l'attribut "checked" sur votre case à cocher. Si c'est faux/undefined/null alors faites le vide.

$('#end_date_specified').click(function() { 
if(!$('#end_date_specified').attr('checked')) { 
    $('#end_date_datepicker, #end_date_datepicker_altfield').empty(); 
    $('#datediv').toggle(); 
} 
});