2011-04-01 2 views
1

Сегодня я наткнулся на ошибку в своем веб-приложении относительно функции отправки формы (в js) и кнопку click action в jQuery.jQuery .click (foo()) неожиданное поведение

У меня есть форма, которая имеет действие submitEmpSearch() прилагается к нему. Это встроено в html формы, так как это действие onSubmit. Существует также кнопка поиска, связанная с формой с событием onclicksubmitEmpSearch(). Я делал попытку очистить встроенный javascript от шаблонов в пользу вызовов jQuery. В включенном вызове jQuery у меня был звонок $('#search-button').click(submitEmpSearch()) внутри моей группы $(document).ready.

Из моего предыдущего опыта работы с функцией .click() я ожидал, что эта функция будет иметь те же функции, что и встроенный атрибут onclick. Однако вместо этого он дал странице бесконечный цикл (по-видимому), нажав кнопку, как только он загрузился!

Теперь, ранее, я всегда проходил шаблон function() {}. Раньше я никогда не проходил предопределенной функции. Это какой-то вопрос в jQuery язык framework? Или есть что-то еще, что я делаю неправильно?

ответ

4

jQuery - это не язык. JavaScript - это язык. Вы пропускание результата функции, когда вы хотите передать самое функцию:

Оно должно быть:

$('#search-button').click(submitEmpSearch) 

В JavaScript функции могут быть переданы в качестве значений. Однако submitEmpSearch() - это возвращаемое значение вызова функции, как и следовало ожидать от других языков.

+1

Просто сказать, что 'jQuery - это не язык. ' хорошо предназначен, но ужасно ошибочен :) – Christian

+1

@Christian, я не согласен. Люди, которые считают, что jQuery - это язык программирования, склонны пренебрегать изучением реального языка, на котором они работают. Затем они делают ошибки, подобные этому. –

+0

Вот почему я сказал, что это «хорошо предназначено», потому что такой синтаксис работает одинаково для других языков. Например, в PHP вы передаете имя функции в виде строки. Другие языки делают то же самое, что jquery (javascript), включая C++ и delphi. – Christian

0

Изменение от:

$('search-button').click(submitEmpSearch()) 

к:

$('search-button').click(submitEmpSearch) 

Таким образом, вместо выполнения submitEmpSearch() и передавая ее возвращаемое значение щелчка(), вы передаете делегат к нажмите().

0

Попробуйте это.

$('#search-button').click(function(){ 
    submitEmpSearch(); 
}); 
+0

Нет причин для дополнительного слоя косвенности. –

+0

Это сработает, но на этот вопрос он не отвечает. Хотя я бы не проголосовал. – Kon

1

Aha!

Вы должны передать функции по ссылке, а не вызывать функцию и передать ее результат:

function handler(){ 
    // ... 
} 
jQuery('.something').click(handler()); // <- wrong 
jQuery('.something').click(handler); // <- right 
+0

Клянусь, я попробовал это после проверки документов jQuery: передача ссылки на функцию имеет смысл, но я не думаю, что она что-то решила. Я был, однако, парным программированием, а не тем, что было на водительском месте. Я снова проверил его. –

+0

aahh, чудеса группового программирования и недостающие вещи, которые должны быть очевидны. попробовал, исправил ошибку, потерял функциональность кнопки. Забыл, чтобы добавить идентификатор к кнопке. * facepalm * –

3

Вместо

$('search-button').click(submitEmpSearch()) 

использование только

$('#search-button').click(submitEmpSearch) 

или

$('#search-button').click(function(){submitEmpSearch();}) 

Также, если «кнопка поиска» - это класс, вы должны добавить «.». (точка) перед ним. Если это идентификатор, вы должны добавить «#». См. Мои примеры.

+0

отредактированный пример, чтобы отразить ваш комментарий к классу. моя вина. –

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