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

Как я могу выполнить внешнюю функцию при щелчке элемента?

Я пытаюсь выполнить внешнюю функцию при щелчке элемента DOM, не обернув его в другую функцию.

Скажем, у меня есть функция, называемая sayHello(), следующим образом:

function sayHello(){
  alert("hello");
};

Чтобы выполнить его при щелчке, я в настоящее время должен это сделать:

$("#myelement").click(function(){
  sayHello();
});

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

$("#myelement").click(sayHello());

За исключением того, что просто не работает. Можно ли каким-либо образом обматывать вызов одной функции другой функцией? Спасибо!

.

Дополнительная информация: Как мне достичь того же, когда мне нужно передать параметры функции?

..

Дополнительная информация: Как отметил Крис Брандсма и Яни Хартикайнен, нужно иметь возможность использовать функцию привязки для передачи параметров функции без ее переноса в другую анонимную функцию как таковую:

$("#myelement").bind("click", "john", sayHello);

с sayHello() теперь принимает новый параметр как таковой:

function sayHello(name){
  alert("Hello, "+name);
}

Это, к сожалению, похоже не работает... Любые идеи? Документация Events/bind находится здесь Спасибо!

4b9b3361

Ответ 1

Чтобы ответить на вопрос, который у вас был там.

Очевидно, вам нужно называть это следующим образом:

$("#myelement").click(sayHello);

Вызвать его так, как вы его фактически выполнили, вместо отправки метода обработчику кликов.

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

$("#myelement").click(function(){ sayHello("tom");});

Или вы можете передавать данные через функцию bind()

function sayHello(event){ alert("Hello, "+event.data); }

$("#myelement").bind("click", "tom", sayHello);

Или вы можете получить данные из элемента, который был нажат

$("#myelement").click(function(){sayHello($(this).attr("hasData");});.

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

Ответ 2

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

$("#myelement").click(sayHello);

Изменить: Если вам нужно передать параметры функции sayHello, вам нужно будет обернуть ее в другую функцию. Это определяет новую функцию без параметров, которая вызывает вашу функцию с параметрами, предоставленными во время создания:

$("#myelement").click(function () {
   sayHello('name');
   // Creates an anonymous function that is called when #myelement is clicked.
   // The anonymous function invokes the sayHello-function
});

Ответ 3

.

$( "# MyElement" ) нажмите кнопку (SayHello());

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

Вместо этого попробуйте:

$("#myelement").click(sayHello);

И в отношении вашего редактирования, если вам нужно передать параметры, вы можете просто использовать технику закрытия, которую вы уже используете, но если вы ищете что-то более чистое, то посмотрите How могу ли я передать ссылку на функцию с параметрами?

Ответ 4

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

вы не можете передавать параметры, но вы можете подделать объект параметра, просто добавив его в объект, который запускает событие, поэтому..

myObject.onClick = sayHello;
myObject.param1 = "foo";

тогда, когда вы вызываете это

function sayHello(){
  alert(this.param1);
}

Ответ 5

Метод bind() теперь устарел.

Начиная с jQuery 3.0, .bind() устарела. Он был заменен методом .on() для присоединения обработчиков событий к документу начиная с jQuery 1.7, поэтому его использование уже не поощрялось.

Вам лучше делать все привязки событий с помощью метода on() для согласованности. Вы можете передать параметры своему обработчику в качестве второго аргумента после имени события.

function sayHello(name){
    console.log('Hello ' + name);
};

$('#myelement').on('click', 'John', sayHello);

Ответ 6

Да, вместо передачи sayHello() просто передайте имя функции.

$("#myelement").click(sayHello);