2010-01-08 7 views
2
l'action

je le Javascript suivant:Javascript (jQuery) Syntaxe sur le bouton clic

var form = $(formArray[i]); 
var formAction = form.attr("action"); 
var button = form.find("input:submit"); 
button.click(function (formAction, form) { 
    return function() { 
    var formAjaxAction = formAction.replace(originalString, ajaxString); 
    ajaxPostHandler(formAjaxAction, onSuccessFunc, function() { 
     errorHandler(errorMsg, widget); 
    }, widget, "internalAjaxQueue", false, form); 
    return false; 
    }; 
}(formAction, form)); 

Qu'est-ce que la dernière ligne faire? Invoquer l'action?

+0

Maintenant, vous avez rep. – SLaks

Répondre

2

Il fonctionne comme ceci:

function (formAction, form) { 
    return function() { 
    var formAjaxAction = formAction.replace(originalString, ajaxString); 
    ajaxPostHandler(formAjaxAction, onSuccessFunc, function() { 
     errorHandler(errorMsg, widget); 
    }, widget, "internalAjaxQueue", false, form); 
    return false; 
    }; 
} 

définit une fonction (évidemment) mais à l'intérieur:

{function(...) ... } 

il est scope de ne pas être visible en dehors de ce contexte. Cette fonction renvoie une fonction anonyme.

(function(...) ... }(formAction, form) 

appels qui fonctionnent avec ces deux arguments et:

button.click(...); 

attribue cette fonction anonyme pour être un gestionnaire d'événements de clic pour le bouton.

C'est une manière assez obscure d'écrire ce qu'il fait.

+0

merci, serait de voter si avait rep – Ben

+0

@Ben Aston. Si vous trouvez une réponse particulièrement correcte, vous pouvez la marquer comme telle. – Tracker1

3

Ce code définit une fonction qui prend deux paramètres function (formAction, form) et renvoie un gestionnaire de clic. return function() { ... };.

Il appelle ensuite la fonction avec les deux paramètres (la dernière ligne) et passe la fonction qu'il renvoie à la fonction click de jQuery.

La raison de procéder de cette manière est que si vous attribuez ultérieurement quelque chose d'autre aux variables form ou formAction, le gestionnaire ne sera pas affecté.

+0

merci, serait de voter si avait rep – Ben

Questions connexes