2010-12-07 3 views
0

S'il vous plaît trouver le code ci-dessousquestion Basculer cliquez avec case

$("#chkCopy").toggle(function() { 
    copyDetails(); 
}, 
function() { 
    emptyCopyDetails(); 
}); 

// functions which do not have any effect on the checkbox 
function copyDetails() { 

} 

function emptyCopyDetails() { 
} 

Le problème est que la case ne montre pas l'état vérifié.

Demo

Merci à l'avance

Répondre

0

un coup d'oeil à cette réponse vous faire la même chose

Jquery toggle event is messing with checkbox value

+0

Cette réponse est un mauvais exemple de ce qu'il faut faire aussi bien, puisque 'this.checked' est une propriété DOM directement accessible,' $ (this) .attr ("checked") 'est * énorme * exagéré. –

2
$("#chkCopy").change(function() {    alert("1"); 

      }, 
      function() { 
       alert("2"); 
      }); 

changement d'affectation au lieu de basculer

+2

Cela ne fonctionnera pas, '.change()' n'a pas de surcharge avec 2 gestionnaires. –

+0

@Nick vous pouvez également utiliser .click() –

+1

non ... il n'accepte pas non plus 2 gestionnaires, '.toggle()' est une fonction spéciale :) –

1

De l'documentation:

Depuis .toggle() interne utilise un cliquez sur h Andler à faire son travail, nous devons unbind click pour supprimer un comportement attaché avec .toggle(), si d'autres gestionnaires click peuvent être pris dans le feu croisé . La mise en œuvre également appels .preventDefault() sur l'événement, si les liens ne sera pas suivi et boutons ne sera pas cliqué si .toggle() a été appelé sur l'élément .

Vous ne pouvez donc pas utiliser toggle() si vous souhaitez que la case à cocher soit cochée et non cochée. Vous pouvez utiliser click() à la place:

$("#chkCopy").click(function() { 
    if (this.checked) { 
     copyDetails(); 
    } else { 
     emptyCopyDetails(); 
    } 
});