Javascript, обработчик событий всегда вызывается, даже если событие не вызывается - PullRequest
0 голосов
/ 04 августа 2011

у меня есть следующий код, который расширяет JQuery и добавляет метод к JQuery:

$.fn.attachWithMessage = function () {
  $(this).focusin(showMessage());
}

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

, чтобы я мог использовать этот код следующим образом:

<input type="text" name="name" id="textbox" />
$(document).ready(function () {
   $("#textbox").attachWithMessage ();
});

когда я загружаю страницу в первый раз, появляется окно с сообщением ('hi').

, даже если я не щелкнул в текстовом поле.

Я также попробовал событие click, и сообщение все равно отображается автоматически.

есть идеи ??

Ответы [ 2 ]

5 голосов
/ 04 августа 2011

Проблема здесь в том, что когда вы передаете showMessage() в качестве параметра focusin, функция showMessage равна выполняется и возвращаемое значение передается focusin.

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

Используйте следующий код для расширения:

$.fn.attachWithMessage = function () {   
  $(this).focusin(showMessage); 
} 

Рабочий пример @ http://jsfiddle.net/eXEP5/

РЕДАКТИРОВАНИЕ: Если вы хотите передать параметр в showMessage, попробуйте это:

$.fn.attachWithMessage = function () {   
  var param1 = "Some Param";
  $(this).focusin(function(){
     showMessage(param1); //Make sure showMessage is modified accordingly for the parameters.
  }); 
} 
2 голосов
/ 04 августа 2011

просто удалите скобки

$(this).focusin(showMessage());

должно быть

$(this).focusin(showMessage);

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...