单击元素时如何执行外部函数?

Yuv*_*rmi 12 javascript jquery event-handling

我试图在点击DOM元素时执行外部函数,而不将其包装在另一个函数中.

假设我有一个名为的函数sayHello(),如下所示:

function sayHello(){
  alert("hello");
};
Run Code Online (Sandbox Code Playgroud)

要在点击时执行它,我目前必须这样做:

$("#myelement").click(function(){
  sayHello();
});
Run Code Online (Sandbox Code Playgroud)

注意我被迫将单个函数调用包装在另一个函数中.我想要做的就是这样

$("#myelement").click(sayHello());
Run Code Online (Sandbox Code Playgroud)

除此之外根本不起作用.我可以避免以任何方式将单个函数调用包装在另一个函数中吗?谢谢!

.

附加信息:当我需要将参数传递给函数时,我将如何实现相同的功能?

..

附加信息:像Chris Brandsma和Jani Hartikainen所指出的那样,应该能够使用bind函数将参数传递给函数,而不必将其包装在另一个匿名函数中:

$("#myelement").bind("click", "john", sayHello);
Run Code Online (Sandbox Code Playgroud)

sayHello()现在接受一个新的参数,因为这样的:

function sayHello(name){
  alert("Hello, "+name);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这似乎不起作用......任何想法?事件/绑定文档位于此处 谢谢!

Chr*_*sma 21

从你在那里的问题中挑选.

显然,你需要以这种方式调用它:

$("#myelement").click(sayHello);
Run Code Online (Sandbox Code Playgroud)

以它的方式调用它实际上执行方法而不是将方法发送到单击处理程序.

如果您需要传递数据,您也可以这样调用方法:

$("#myelement").click(function(){ sayHello("tom");});
Run Code Online (Sandbox Code Playgroud)

或者您可以通过该bind()功能传递数据

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

$("#myelement").bind("click", "tom", sayHello);
Run Code Online (Sandbox Code Playgroud)

或者,您可以从单击的元素中检索数据

$("#myelement").click(function(){sayHello($(this).attr("hasData");});.
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.


Pat*_*and 8

您正在调用sayHello函数,您可以通过删除括号来引用它:

$("#myelement").click(sayHello);
Run Code Online (Sandbox Code Playgroud)

编辑:如果需要将参数传递给sayHello函数,则需要将其包装在另一个函数中.这定义了一个无参数的新函数,它使用创建时提供的参数调用函数:

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