2016-12-21 4 views
0

J'essaie de changer la position d'arrière-plan d'un élément en utilisant une case à cocher, mais ne fonctionne pas.Javascript checkbox pour changer d'arrière-plan ne fonctionne pas

Voici le code:

x = false; 
 

 
function Check() { 
 
    if (x) { 
 
    document.getElementById("checkboz").style.backgroundPosition = '0 0'; 
 
    document.getElementById("checkboz").style.backgroundPosition = '-28px 0'; 
 
    x = false; 
 
    } else { 
 
    document.getElementById("checkboz").style.backgroundPosition = 'none'; 
 
    document.getElementById("checkboz").style.backgroundPosition = '0 0'; 
 
    x = true; 
 
    } 
 

 
}
#checkboz { 
 
    background: url(http://movimientomore.com/images/2016/12/21/sprite-check-01.png); 
 
    background-size: 55px; 
 
    background-repeat: no-repeat; 
 
    width: 28px; 
 
    height: 28px; 
 
}
<div id="checkboz" class="checkbox"> 
 
    <label for="modlgn-remember"> 
 
    <input id="modlgn-remember" name="remember" class="inputbox" value="yes" type="checkbox">Recordarme</label> 
 
</div>

Merci beaucoup pour votre aide :)

+1

Comment appelez-vous votre fonction? Vous n'avez pas invoqué de fonction du tout? – sinisake

+2

Ajoutez 'onclick =" Check() "' à la case à cocher. – Barmar

+1

Check() n'est jamais appelé. – Korgrue

Répondre

3

Vous ne disposez pas d'un EventListener ou onclick dans votre code.

document.getElementById("checkboz").addEventListener("click", Check); 

x=false; 
 
function Check(){ 
 
    x=!x; 
 
    if(x){  
 
    document.getElementById("checkboz").style.backgroundPosition='0 0'; 
 
    document.getElementById("checkboz").style.backgroundPosition='-28px 0'; 
 
    } 
 
    else{ 
 
    document.getElementById("checkboz").style.backgroundPosition='none'; 
 
    document.getElementById("checkboz").style.backgroundPosition='0 0'; 
 
    } 
 

 

 
} 
 
document.getElementById("checkboz").addEventListener("click", Check);
#checkboz{ 
 
    background: url(http://movimientomore.com/images/2016/12/21/sprite-check-01.png); 
 
    background-size: 55px; 
 
    background-repeat: no-repeat; 
 
    width: 28px; 
 
    height: 28px; 
 
}
<div id="checkboz" class="checkbox"> 
 
    <label for="modlgn-remember"><input id="modlgn-remember" name="remember" class="inputbox" value="yes" type="checkbox">Recordarme</label> 
 
</div>

Ou vue sur jsfiddle.net

Lisez: EventTarget.addEventListener() - Web APIs | MDN

+1

Mise à jour du code pour qu'il soit incorporé à ce message, ainsi que d'une erreur corrigée avec la valeur de basculement prévue pour l'arrière-plan. (cochée lorsque cochée, décochée lorsqu'elle n'est pas cochée). L'autre code l'a fait ne rien faire lors de la première vérification, puis il a été vérifié lorsque la case n'était pas cochée. –

+0

Merci beaucoup! – jvelezr

+0

Je suis nouveau à répondre aux questions, merci pour le montage. –

0

J'ai mis à jour votre violon pour montrer une version de travail de la fonctionnalité que vous recherchez.

Your fiddle

Comme d'autres l'ont dit dans les commentaires, la fonction de vérification n'a jamais été appelé, mais en plus, il est préférable d'échanger des cours sur les éléments plutôt que d'essayer de manipuler manuellement les styles.

var element = document.getElementById('modlgn-remember'); 
    element.addEventListener('click', function(e) { 
     console.log(element.checked) 
     Check(element.checked); 
    }, false); 
    x=false; 
    function Check(checked){ 
     console.log(x); 
     var $el = document.getElementById("checkboz") 
     if(checked){ 
     $el.className = $el.className.replace(' remove-background- position-1 remove-background-position-2', ''); 
     $el.className += ' add-background-position-1 add-background-position-2'; 
     x=false; 
     } else { 
     var cn = $el.className; 
     cn = $el.className.replace(' add-background-position-1 add-background-position-2', ''); 
     $el.className = cn; 
     $el.className += ' remove-background-position-1 remove-background-position-2'; 
     x=true;  
     } 
    } 

Avec les classes CSS suivantes:

.add-background-position-1 { 
     background-position: 0 0 !important; 
    } 

    .add-background-position-2 { 
     background-position: -28px 0 !important; 
    } 
    .remove-background-position-1 { 
     background-position: inherit !important; 
    } 
    .remove-background-position-2 { 
     background-position: 0 0 !important; 
    } 

sans importance sur les classes css le style d'arrière-plan existant a priorité sur les nouvelles classes.

J'espère que cette aide!