2011-05-30 3 views
2

J'utilise Ben AlmanjQueryhashChange plugin d'événement. la partie de hachage ressemble à ceci:Comment déclencher différentes fonctions sur le hachage en fonction de la valeur de hachage avec jQuery?

#x=1&y=2&z=3 

J'ai déjà des fonctions qui analyse syntaxique getHashPart(key) et setHashPart(key).

Je voudrais avoir une fonction qui permettrait de s'enregistrer avec le changement d'une partie spécifique du hachage. Je l'utiliser en tant que tel (je suppose ...):

$(window).hashchange('x',function(new_value_of_x) {do something x related;}); 
$(window).hashchange('y',function(new_value_of_y) {do something y related;}); 

Comment pourrais-je enregistrer une telle fonction avec jQuery? quelque chose de similaire existe-t-il?

Merci!

+1

http://www.bennadel.com/blog/1520-Binding-Events-Ton-Don-DOM-Objects-With-jQuery.htm explique comment configurer un événement onchange pour l'URL de la page. Cependant, si vous faites ce que je pense que vous faites, vous devez lier les liens qui définissent le hachage pour effectuer ce que vous voulez faire, puis sur le chargement du document vérifier s'il y avait un hachage dans l'URL pour effectuer l'action devrait. – Niklas

+0

Bon article. Je vais attendre pour voir d'autres solutions proposées. – Ben

+1

ps. Si j'étais vous, je changerais le titre de la question en quelque chose comme "Comment déclencher différentes fonctions sur le changement de hachage basé sur la valeur de hachage avec jQuery?". Juste une offre. –

Répondre

4

Vous pouvez avoir une fonction qui répond à tous les événements hashchange (de préférence en maintenant le plugin hashchange utilisé), puis redirigez aux gestionnaires individuels comme ceci:

var hashParameters = {}; 

$(window).bind("hashchange",function(event) { 
//if you're using the awesome hashchange plugin 
//$(window).hashchange(function(event) { ... 
    var newParameters = getParameters(event.target.location.hash.substring(1)); 
    $.each(newParameters, function(key, value) { 
     if(hashParameters[key] !== value) $(window).trigger(key + "-change"); 
     hashParameters[key] = value; 
    }); 
}); 

$(window).bind("andsome-change", function() { 
    alert("hi!"); 
}); 

function getParameters(paramString) { 
    //taken from http://stackoverflow.com/questions/4197591/parsing-url-hash-fragment-identifier-with-javascript/4198132#4198132 
    var params = {}; 
    var e, a = /\+/g, r = /([^&;=]+)=?([^&;]*)/g, 
     d = function (s) { return decodeURIComponent(s.replace(a, " ")); }; 
    while (e = r.exec(paramString)) 
     params[d(e[1])] = d(e[2]); 
    return params; 
} 

window.location.hash = "some=value&andsome=othervalue"; 

j'ai une démonstration de travail here (maintenant avec le plugin hashchange, voir premier commentaire).

+1

+1, fyi, vous * pouvez * inclure des scripts externes dans un jsFiddle - sur la gauche, cliquez sur "Ajouter des ressources" et collez le lien. Alternativement, il suffit de coller '' dans le cadre HTML . –

+0

que "je ne pouvais pas" signifie "j'étais trop paresseux" trop =)) merci beaucoup pour la suggestion et voici le lien avec le correctif: http://jsfiddle.net/TuVBL/1/ –

Questions connexes