Подтвердить что ты не робот

Связывание существующей функции JavaScript в jQuery

Использование jQuery Я хочу привязать существующую функцию к кнопке. Я прошел через документацию и нашел метод bind, но примеры в jQuery связывают вновь созданные функции, где я хочу связать функцию, которая уже жестко закодирована, например:

function fHardCodedFunction(){
   //Do stuff
}

function fBindFunctionToElement(){
   $("#MyButton").bind("click", fHardCodedFunction());
}


Это возможно? Или я об этом ошибаюсь?

4b9b3361

Ответ 1

Простой fHardCodedFunction уже относится к функции, и суффикс () просто вызовет его. Поэтому просто передайте функцию вместо ее вызова и тем самым просто передайте возвращаемое значение:

function fBindFunctionToElement(){
   $("#MyButton").bind("click", fHardCodedFunction);
}

Ответ 2

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

function fHardCodedFunction(someValue) {
  alert(this.id + " - " + someValue);
}


function fBindFunctionToElement() {
  var someValue = "whatever";
  $("#MyButton").bind("click", 
       function() {
         fHardCodedFunction.apply(this, [someValue]);
       }
  );
}


$(document).ready
(
  function() {
    fBindFunctionToElement();
  }
);

Я использую apply здесь, потому что в функции fHardCodedFunction я хотел бы, чтобы свойство this ссылалось на элемент MyButton. Также обратите внимание, что apply ожидает массив для второго параметра, поэтому я заключил someValue в скобки.

Вам не обязательно это делать и вы можете забыть об этом свойстве this, если хотите.

Ответ 3

Да, вы можете связывать методы, написанные где-то в другом месте, но вы должны игнорировать круглые скобки:

function fHardCodedFunction(){
   //Do stuff
}

function fBindFunctionToElement(){
   $("#MyButton").bind("click", fHardCodedFunction);
}