2009-09-23 6 views
0

J'essaie de passer une fonction en option via un plugin jquery que je construis moi-même.Création de votre propre plugin jquery - problème de fonction

Au moment où l'initialisation mon plug-in avec l'option suivante:

$.fitAjaxSubmit({ 
    formId:   "new_team", 
    postUrl:  "/teams/create.json", 
    redirectUrl: "/teams/", 
    saveBoxText: "Saving Team...", 
    beforeSubmitFn: function(){ alert('Boo!'); } 
}); 

Dans mon plugin, je suis en train d'appeler la beforeSubmitFn comme si (je suis également en utilisant le plugin formulaire ajax):

(function($){ 
    $.fn.fitAjaxSubmit = function(options) { 

     var defaults = { 
      formId:     "formId", 
      postUrl:    "postUrl", 
      redirectUrl:   "redirectUrl", 
      saveBtnId:    "save_button", 
      saveBtnEnableText:  "Save", 
      saveBtnDisableText:  "Saving...", 
      saveBoxId:    "saving-box", 
      saveBoxText:   "Saving...", 
      errorMsgId:    "error_messages", 
      beforeSubmitFn:   function(formData, jqForm, options) {}, 
      successFn:    function(response) { 
       if(response.success == true) { 
        window.location = options.redirectUrl + response.object_id; 
       } else { 
        $('#'+options.saveBtnId).removeAttr('disabled').val(options.saveBtnEnableText); 
        $('#'+options.saveBoxId).text(options.saveBoxText).fadeOut(300); 
        $('#'+options.errorMsgId).html(errorMessages(response)).hide().fadeIn(300); 
        window.scrollTo(0,0); 
       } 
      } 
     }; 

     var options = $.extend(defaults, options); 

     return this.each(function() { 
      $('#'+options.saveBtnId).click(function() { 

       $('#'+options.saveBtnId).attr('disabled', 'disabled').val(options.saveBtnDisableText); 
       $('#'+options.saveBoxId).text(options.saveBoxText).fadeIn(200); 

       $('#' + options.formId).ajaxForm({ 
        url: options.postUrl, 
        type: "POST", 
        dataType: "json", 
        beforeSubmit: options.beforeSubmitFn, 
        success: options.successFn 
       }) 
      }); 
     }); 
    }; 
})(jQuery); 

Pour une raison quelconque, le fichier beforeSubmitFn fonctionne dans Firefox, mais dans Internet Explorer, Safari et Chrome cela ne fonctionne pas du tout!

Y at-il quelque chose qui me manque ici?

Merci d'avance!

+0

Il se peut que les options soient hors de portée au moment où vous y accédez. Les autres valeurs des options fonctionnent-elles? Pouvez-vous nous donner un peu plus de code? –

+0

Juste ajouté plus de code! Merci les gars! – schone

+0

Il semble être isolé à cette ligne $ ('#' + options.saveBtnId) .attr ('disabled', 'disabled'). Val (options.saveBtnDisableText); - Je n'arrive pas à comprendre pourquoi! – schone

Répondre

1

Deviner ici puisque vous ne montrez pas tout votre code. Le code que vous avez posté ici a l'air bien. IE et la plupart des autres navigateurs gèrent différemment le formatage des mappages d'objets. Vous pouvez vérifier une virgule supplémentaire dans la définition de vos options.

+0

Ne semble pas être une virgule causant un problème, IE ne jette pas une erreur JS non plus – schone

Questions connexes