2011-05-17 7 views
0

pourrait quelqu'un m'aider s'il vous plaît, pour une raison quelconque sur la page de chargement les boutons semblent tous être dans la position "sur" même si j'ai une case "cochée" et l'autre non vérifiée.Problème avec mon initialiser

Le problème semble être dans if/then de initialize_slideCheck(). Je suppose que j'utilise mal le prochain() ???

Comment puis-je cibler uniquement le .checkboxTrigger qui est enveloppé dans la même div que la case à cocher?

PAGE LOCATED HERE

Toute aide appréciée!

 

$(document).ready(function(){ 

       function initialize_slideCheck(){ 
        var slideCheck = $('.slideCheck'); 

        slideCheck.wrap(""); 
        slideCheck.after(""); 

        slideCheck.attr('style', 'display:block;'); 

        if(slideCheck.is(':checked')){ 
         $(this).next(".checkboxTrigger").css("left", "-8px"); 
        }else if(slideCheck.not(':checked')){ 
         $(this).next(".checkboxTrigger").css("left", "-40px"); 
        } 

       } 

       initialize_slideCheck(); 

       $(".checkboxTrigger").click(function(){ 

        var position = $(this).position().left; 

        if(position == -8){ 
         $(this).animate({"left": "-40px"}, 200); 
         $(this).prev('.slideCheck').attr('checked', ''); 
        } 
        else if(position == -40){ 
         $(this).animate({"left": "-8px"}, 200); 
         $(this).prev('.slideCheck').attr('checked', 'checked'); 
        } 

       }); 

      }); 
 

Répondre

1

Cela devrait faire l'affaire. is() renvoie true si des éléments de l'ensemble correspondent au sélecteur. Dans ce cas, la condition ': checked' sera toujours eval à true.

function initialize_slideCheck() { 
    $('.slideCheck') 
     .wrap("<div class='checkboxWrapper rounded'></div>") 
     .after("<a class='checkboxTrigger' href='#'></a>") 
     .css({'display':'block'}) 
     .each(function(){ 
      var $this = $(this); 
      if ($this.is(':checked')) { 
       $this.nextAll('.checkboxTrigger').css({'left':'-8px'}); 
      } else { 
       $this.nextAll('.checkboxTrigger').css({'left':'-40px'}); 
      } 
     }) 
} 

EDIT:

En outre, votre gestionnaire de clic sur l'élément checkboxTrigger ne 'vérifier' correctement la case à cocher. Remplacer .attr('checked', '') avec .attr('checked', false)

+0

Wow M. Cowie merci beaucoup pour l'aide, ça a marché! Im sûr en regardant mon code, vous pouvez dire que je suis nouveau à cela, je ne savais même pas que nous pourrions empiler .wrap, .after etc. un sur un autre comme ça. Le simple fait de regarder votre code me montre à quel point je suis programmeur, merci encore! – Stefan

+0

@ user548906 Aucun problème. jQuery est facile quand vous l'avez compris. Restez avec. –

0

next() sélectionne le frère suivant. Utilisez nextAll('selector') à la place. Vous pouvez consulter le manuel complet sur nextAll()here. La même chose arrive avec prev(). Utilisez prevAll() à la place. Vous pouvez lire ce manuel here.

+0

Merci pour l'aide, j'ai essayé nextAll et je n'ai toujours pas de chance. J'ai mis à jour le PO avec un lien vers la page d'exemple sur laquelle je travaille, pensez-vous que vous pourriez jeter un coup d'œil? – Stefan

0

Il est difficile de dire avec certitude sans voir le HTML, mais il me semble que le problème est avec vos appels de méthode $ (this) .next (...) dans la méthode initialize_slideCheck. À ce stade ce est le document, donc next() n'obtiendra pas l'élément à côté de slideCheck. Je pense que ce que vous essayez probablement de faire est:

function initialize_slideCheck(){ 
    ... 
    if(slideCheck.is(':checked')){ 
     slideCheck.next(".checkboxTrigger").css("left", "-8px"); 
    } else if(slideCheck.not(':checked')){ 
     slideCheck.next(".checkboxTrigger").css("left", "-40px"); 
    } 
} 

Notez le changement de $ (ce) .next à slideCheck.next.

+0

Hmm J'ai donné un coup de feu et toujours pas de dés, j'ai mis à jour le PO avec un lien vers la page sur laquelle je travaille, pourriez-vous jeter un coup d'œil? Ne tenez pas compte du CSS, juste pour montrer la case à cocher qui sera cachée une fois que cette chose fonctionne correctement. – Stefan