2010-12-04 22 views
0

je le code suivant qui met en place des éléments de formulaire personnalisé sur la charge de la page et les met à jour si l'utilisateur clique sur eux:jQuery: Nom d'une fonction générique pour que je puisse l'appeler après l'événement ajax

// Setup Function 
$(function() { 
    $('form.vote_ballot > input:checked').prev().addClass('selected'); 
}); 

// Interaction Function 
$(document).ready(function() { 
    $('form.vote_ballot > label').click(function() { 
     $(this).siblings().removeClass("selected").end() 
      .addClass("selected"); 
    }); 
    $('form.vote_ballot').change(function() { 
     $('form.vote_ballot').submit(); 
    }); 
}); 

Cela permet essentiellement à un utilisateur de donner un vote "pouce levé" ou "pouce vers le bas". Le code fonctionne comme prévu lorsqu'un utilisateur modifie un vote existant, mais lorsqu'il crée un nouveau vote, une requête ajax est traitée et la fonction d'installation initiale doit être appelée à nouveau. La fonction d'installation ne doit être appelée qu'une seule fois (c'est pourquoi elle est en dehors du bloc document.ready). La partie interaction du bloc document.ready fonctionne correctement avant et après l'événement ajax. Je ne suis pas très compétent avec jQuery, et je n'ai pas été capable de comprendre comment prendre la fonction d'installation et lui donner un nom pour que je puisse l'appeler à nouveau après l'événement ajax.

Une aide?

Répondre

3

Ce code:

$(function() { 

et ceci:

$(document).ready(function() { 

font exactement la même chose. Ainsi, vous pouvez traiter tout sur un seul bloc, comme celui-ci:

$(function() { 
    var setupFunction = function() { 
     $('form.vote_ballot > input:checked').prev().addClass('selected'); 
    } 

    // Setup Function 
    setupFunction(); 

    // Interaction Function 
    $('form.vote_ballot > label').click(function() { 
     $(this).siblings().removeClass("selected").end() 
      .addClass("selected"); 
    }); 
    $('form.vote_ballot').change(function() { 
     $('form.vote_ballot').submit(); 
    }); 

    // example ajax call: 
    $.ajax({ ... 
     success: function() { 
     ... 
     addSelected(); // call from here for example 
     ... 
     } 
    }); 
}); 

Comme vous le voyez, je passai une partie de code à une fonction (je l'ai appelé setupFunction), et je peux l'appeler partout à l'intérieur $(function() { ... }); bloc

+0

Ok, ça aide! Maintenant dans mon cas, j'ai l'événement ajax qui se passe dans un fichier javascript séparé, pas le même bloc de document prêt. Puis-je appeler setupFunction à partir d'un autre fichier, ou dois-je faire quelque chose de différent dans ce cas? – Andrew

+0

ok, alors vous devez placer setupFunction en dehors (!) Du bloc document.ready. il doit donc être défini dans un fichier javascript brut. alors utilisez pouvez l'utiliser à partir de ** n'importe quel ** fichier. – Genius

+0

Super, merci pour l'aide! – Andrew