jQuery .click (foo ()) неожиданное поведение - PullRequest
1 голос
/ 01 апреля 2011

Сегодня я столкнулся с ошибкой в ​​моем веб-приложении, касающейся функции отправки поиска в форме (в js) и действия нажатия кнопки в jQuery.

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

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

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

Ответы [ 5 ]

4 голосов
/ 01 апреля 2011

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

Должно быть:

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

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

3 голосов
/ 01 апреля 2011

вместо

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

используйте только

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

или

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

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

1 голос
/ 01 апреля 2011

Ага!

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

function handler(){
    // ...
}
jQuery('.something').click(handler()); // <- wrong
jQuery('.something').click( handler ); // <- right
0 голосов
/ 01 апреля 2011

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

$('#search-button').click(function(){
    submitEmpSearch();
});
0 голосов
/ 01 апреля 2011

Изменить с:

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

на:

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

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

...