2009-03-02 13 views
0

J'ai un gros problème pour écrire un petit morceau de code en utilisant JS/jQuery (je ne sais pas lequel d'entre eux cause le problème). Quoi qu'il en soit, on y va:Comment - fonctions de rappel

$('#themePicker').unbind().click(function() { 
    var t = $(this);  
    modalwindow2(t, function() { 
     console.log(1); 
    }, function(w) { 
     console.log(w); 
    }); 

    return false; 
}); 

et la fonction elle-même:

function modalwindow2(w, callbackOnSHow, callbackOnHide) { 
    if (typeof(callbackOnSHow) == 'function') { 
     callbackOnSHow.call(); 
    } 

    // do some stuff // 
    $('form').submit(function() { 
     ajaxSubmit(function(data) { 
      if (typeof(callbackOnHide) == 'function') { 
       console.log('---------------'); 
       console.log(data); 
       console.log('---------------'); 
       callbackOnHide.call(data); 
      } 
     }); 

     return false 
    }); 
} 

La fonction est appelée modalwindow2 et je veux appeler une fonction lorsque le modal est affiché et une autre fonction lorsque le modal sera caché.

Le premier n'est pas un problème.

La deuxième ... Eh bien ... Disons que c'est un problème. Pourquoi?

Je veux un paramètre envoyé à la deuxième fonction. Le paramètre est une réponse ajax, similaire à d'autres trucs jQuery (action ajax, sortable, etc).

J'espère que je me suis rendu assez clair.

Merci!

Edit:

J'utilise jQuery 1.1.2 (ou 1.1.3) et la mise à niveau ou en utilisant jQuery UI est pas une solution. J'ai quelques dépendances (interface est l'un d'entre eux) et je n'ai pas assez de temps (ni de motivation) pour passer à 1.3 & UI 1.7.

Répondre

1

J'ai remarqué que vous avez une faute de frappe sur .submit. $ ('form') submti (function() {

Était-ce juste une erreur d'entrée SO

EDIT?: Ok, donc après avoir regardé votre code et de faire un petit test, je suis venu avec ce (pardonnez le jeu de mots):

function modalwindow2(w, callbackOnShow, callbackOnHide) { 
    if(typeof callbackOnShow == 'function') { 
     callbackOnShow.call(); 
    } 
    $('form').submit(function() { 
     if(typeof callbackOnHide == 'function') { 
      callbackOnHide.call(this, "second"); 
     } 
    }); 
} 

$(document).ready(function(){ 
    $('#themePicker').click(function(){ 
     var t=$(this); 
     modalwindow2(t, function() { alert("first"); }, function(x) { alert(x); }); 
     return false; 
    }); 
}); 

Il semble que vous pouvez avoir j Vous avez manqué le "this" dans votre instruction call(). Essayez d'utiliser callbackOnHide.call (this, data); Faites-moi savoir si cela fonctionne mieux!

+0

ouais, je viens de réécrire ici un petit exemple. Le vrai code est waaay plus gros :) De toute façon, merci pour l'avis –

1

Je comprends ce que vous essayez de faire, mais vous devrez stocker la fenêtre nouvellement créée afin que vous puissiez y accéder sur la fonction de rappel de fermeture. Vous voudrez peut-être regarder jQuery UI Dialog. Il fournit des fonctionnalités très basiques pour les fenêtres de dialogue (modales et autres) et gère une partie de l'implémentation du rappel.

+0

Je ne peux pas utiliser l'interface utilisateur. J'utilise une version antique de jquery et je ne peux pas mettre à niveau parce que j'utilise l'interface (qui signifie max jquery 1.1.3 :() –