2009-07-16 9 views
2

Je vais avoir un problème pour obtenir un « changement » événement pour enregistrer avec le code suivantproblème jquery ajouter des événements sur la charge

var map = function(){ 

    function addMapTriggers(){ 
    $("#map_form select").change(getDataWithinBounds); 
    } 

return{ 
    init: function(){ 
    getDataWithinBounds(); 
    addMapTriggers(); 
    } 
}; 
}(); 

et dans un jquery document.ready

$(function(){ 
    map.init(); 
}); 

Je obtenir mes données initiales, puis chaque fois que je change l'un des choix, je reçois à nouveau les données cartographiques (getDataWithinBounds envoie un appel ajax). Le problème est, cela ne fonctionne pas, l'événement de changement n'est jamais ajouté.

Cependant, si, dans la console, je tape map.init(); ça marche. C'est bizarre, je ne comprends pas comment il y a une différence? Qu'est-ce que j'oublie ici? Je suis en train de tester ceci sur safari ET firefox avec le même comportement

+0

Juste pour noter, le init est définitivement appelé comme il fait la requête initiale pour dataWithinBounds, juste les déclencheurs ne sont pas ajoutés pour une raison quelconque – brad

+0

Vous avez un manquant); dans le code prêt ... êtes-vous sûr que javascript n'est pas seulement caca quand il arrive à elle? –

+0

désolé, je l'ai dans mon code d'origine, je viens d'écrire un synopsis de celui-ci et j'ai oublié le) ;. Ne fonctionne toujours pas :( – brad

Répondre

0

Je suis tellement gêné en ce moment et je présente mes excuses pour perdre du temps de tout le monde. Bien sûr, le code ci-dessus fonctionne, ce qui est différent de ce que je fais est que mon site utilise le plugin jquery selectbox, qui styles les sélections en créant un UL avec des événements click pour agir comme un select (pas mon choix, croyez-moi) Malheureusement, j'appelais init avant en appliquant le code selectbox, qui lui-même modifie la liaison des sélections. En premier lieu, l'appel selectbox, puis l'appel à map.init() le résolvent complètement.

Beaucoup d'excuses et merci beaucoup (SolutionYogi en particulier) de prendre le temps de m'aider.

+0

Pas de soucis. Ça arrive aux meilleurs d'entre nous. Personnellement, je reçois un coup de débogage. Je pense que c'est l'une des meilleures parties de la programmation! :) – SolutionYogi

0

Pourquoi ne pas aimer ça?

function map(){ 
return { 
    me = this, 
    addMapTriggers: function(){ 
    $("#map_form select").change(getDataWithinBounds); 
    }, 
    init: function(){ 
    getDataWithinBounds(); 
    me.addMapTriggers(); 
    } 
}; 
}(); 
+2

je voudrais addMapTriggers être privé si – brad

+0

Oh geeze, je me sens assez stupide en ce moment! C'était si évident, ce n'est même pas drôle. –

+0

Ça arrive aux meilleurs d'entre nous: P – brad

1

L'identifiant 'map_form' de votre sélection est-il? Si oui, alors vous devriez faire

$("#map_form").change(getDataWithinBounds); 

« #map_form sélectionnez » va essayer de brancher l'événement de changement à tous les select qui sont présents dans l'élément spécifié par #map_form.

EDIT:

Remarqué une chose, map.init n'existe pas vraiment.

Dans votre code, map est une fonction nommée qui est exécutée immédiatement et qui retourne un objet qui a la méthode init. Cela ne signifie pas que var 'map' a la méthode init.

Vous voulez essayer quelque chose comme ça,

var map = function() 
{ 

    function addMapTriggers() 
    { 
     $("#map_form select").change(getDataWithinBounds); 
    } 

    return { 
     init: function() 
       { 
        getDataWithinBounds(); 
       addMapTriggers(); 
      } 
    }; 
}(); 

Dans le code ci-dessus, vous exécutez une fonction anonyme qui retourne un objet qui a la méthode d'initialisation et affecter le résultat à la carte. objet carte Maintenant sera la méthode d'initialisation et vous pouvez faire ceci:

$(function() 
{ 
    map.init(); 
}); 
+0

#map_form est l'ID du formulaire, donc je déclenche les événements sur tous les sélections dans ce formulaire. Aussi, j'ai remarqué cette erreur et j'ai changé mon code en var map = function() {} Still, map.init(); ne définit pas les déclencheurs, sur document.ready, mais cela fonctionne si je tape simplement dans la console. – brad

+0

Où est défini getDataWithinBounds? Pourriez-vous poster votre code HTML aussi? Essayez aussi, $ ('# map_form select'). Change (function() {alert ('test');}); Voyez si vous voyez l'alerte. Si vous voyez l'alerte, cela signifie que le déclencheur n'est pas capable de résoudre la méthode getDataWithinBounds. – SolutionYogi

+0

getDataWithinBounds est défini de la même manière que addMapTriggers, fonction privée dans l'objet map, elle est juste très longue, donc je l'ai omise. En outre, j'ai essayé avec juste une alerte sur change() mais il ne fait pas non plus, bien qu'il entre dans la fonction addMapTriggers parce que j'enregistre un message quand il entre ... Donc je suis toujours très confus – brad

Questions connexes