2011-01-07 5 views
3

Эй, ребята, у меня есть пара бит кода, который кажется, что они могут быть сжаты, но я не уверен, как это сделать.Javascript named, функция самонастройки

код у меня есть это

var checkForUnitReferred = function() { 
    $("#LeadForm").toggle($("#Claim_UnitReferredNoNull").is(":checked")); 
}; 
checkForUnitReferred(); 

$("#Claim_UnitReferredNoNull").change(function() { 
    checkForUnitReferred();   
}); 

Это в основном проверяет, если флажок установлен и отображает форму, в противном случае она скрывает это. Что бы я предпочел, это что-то вроде этого

var checkForUnitReferred = (function() { 
    $("#LeadForm").toggle($("#Claim_UnitReferredNoNull").is(":checked")); 
})(); 

$("#Claim_UnitReferredNoNull").change(function() { 
    checkForUnitReferred();   
}); 

Я знаю, что это не работает, но я думаю, что что-то подобное было бы чище. Кто-нибудь знает, как это сделать?

+1

Вы имеете в виду вы хотите назвать 'checkForUnitReferred' первоначально, а затем на каждом событии изменения? Я бы не сказал, что ваша вторая часть кода обязательно является чище ... –

+0

Да, это то, что я хочу сделать, мне просто не нравится объявлять функцию, а затем сразу ее вызывать, я бы предпочел, чтобы она вызывается при объявлении и быть проходимым – Jimmy

+1

+1 для гипнозагрузки ... + 1 для гипнозагрузки ... + 1 для гипнозагрузки ... – Ben

ответ

5

Как об этом:

var checkForUnitReferred; 

(checkForUnitReferred = function() { 
    $("#LeadForm").toggle($("#Claim_UnitReferredNoNull").is(":checked")); 
})(); 

$("#Claim_UnitReferredNoNull").change(function() { 
    checkForUnitReferred();   
}); 

Это возможно потому, что присвоение (=) возвращает установленное значение.

2

Назовите функцию напрямую, а не создайте анонимную для назначения переменной. Вы также можете назначить эту функцию в качестве обработчика .change() без дополнительной функции обертку:

(function checkForUnitReferred() { 
    $("#LeadForm").toggle($("#Claim_UnitReferredNoNull").is(":checked")); 
})(); 

$("#Claim_UnitReferredNoNull").change(checkForUnitReferred); 
+0

Не работает для меня, работает на загрузке страницы, но событие изменения не срабатывает. – Jimmy

+0

@lonesomeday: На самом деле здесь нет подъема: круглые скобки гарантируют, что функция анализируется как именованное функциональное выражение, а не объявление функции. В этом случае у этого есть свои проблемы в IE, и этого, вероятно, следует избегать: http://kangax.github.com/nfe/ –

+0

@Tim Gah, спасибо. Удалил мой неправильный комментарий. – lonesomeday