2010-01-08 2 views
2

У меня есть следующие Javascript:Javascript (JQuery) Синтаксис на кнопку мыши действия

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)); 

Что делать в последней строке? Вызывать действие?

+0

Теперь у вас есть репутация. – SLaks

ответ

2

Это работает так:

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

определяет функцию (очевидно), но внутри:

{function(...) ... } 

это область видимости не будет виден за пределами этого контекста. Эта функция возвращает анонимную функцию.

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

вызовы, которые функционируют с этими двумя аргументами и:

button.click(...); 

присваивает анонимной функции, чтобы быть обработчиком события нажатия на кнопку.

Это довольно запутанный способ написать, что он делает.

+0

спасибо, хотел бы проголосовать, если бы представился – Ben

+0

@Ben Aston. Если вы нашли ответ особенно правильным, вы можете отметить его как таковой. – Tracker1

3

Этот код определяет функцию, которая принимает два параметра function (formAction, form) и возвращает обработчик кликов. return function() { ... };.

Затем он вызывает функцию с двумя параметрами (последняя строка) и передает функцию, возвращаемую функцией click jQuery.

Причина этого заключается в том, что если вы впоследствии присвоите что-то еще переменным form или formAction, обработчик не будет затронут.

+0

спасибо, хотел бы проголосовать, если бы представился – Ben

Смежные вопросы