2016-08-31 5 views
0

Я чувствую, что это одна из тех проблем, которые вы только столкнуться после того, как слишком мало сна или слишком много кофе ...Jquery Click-handler не работает с именованной функцией?

У меня есть элемент

<a id="blah" href="#">somethinghere.com</a> 

Я определить функцию

function test(){ 
    alert('hi'); 
}; 

я пытаюсь прикрепить функцию как клик-обработчик (https://jsfiddle.net/8r1rcfuw/30/):

$('#blah').on('click', test()); 

и загрузите страницу, и обработчик выполнится немедленно - без каких-либо щелчков.

Однако, когда я просто использовать анонимную функцию в качестве обработчика (https://jsfiddle.net/8r1rcfuw/36/):

$('#blah').on('click', function(){ 
    alert('hi'); 
}); 

он прекрасно работает

Выполнение обоих (https://jsfiddle.net/8r1rcfuw/39/):

$('#blah').on('click', function(){ 
    test(); 
}); 


function test(){ 
    alert('hi'); 
} 

, кажется, работает нормально - но кажется немного лишним.

Это похоже на то, что я делал 1000 раз раньше - что дает?

+2

'$ ('# бла') на ('нажмите', тест());.' ==> '$ ('# бла') на ('нажмите', тест);.' Удалите вызов. – Tushar

ответ

2

Обработчик события должен быть функцией, и вы передаете результат функции к нему:

$('#blah').on('click', test()); 

одно и то же как:

$('#blah').on('click', undefined); //As your funcion doesn't return anything 

Думай об этом как функции является значение, вы можете сделать:

var myFunction = function() { 
    alert("Hi"); 
} 

или

function myFunction() { 
    alert("hi"); 
} 

И потом:

$('#blah').on('click', myFunction); //Without invocation! 

или используя анонимные функции:

$('#blah').on('click', function() { 
    alert("Hi"); 
}); 
0

Вы также можете использовать объект функции:

var temp=function test() { 
    alert('hi'); 
} 
$('#blah').on('click', temp);