2011-08-03 53 views
1

问题标题jQuery的事件处理程序是有点晦涩,所以让我解释一下。为Javascript功能

一个需求量的也仅仅最近对我解释说是我的项目中使用jQuery的。但是我们注意到,我的函数很好,只要包含一些jQuery就可以重用。

所以我探索事件侦听器的世界首次(JS侧不在HTML)

一个标准的jQuery onclick事件

referenceToElement.onclick = function() { alert('here'); }; 

有一两件事我注意到的是,该功能实际上并没有名字。有没有做这样的事情的任何清洁方式:

referenceToElement.onclick = myOldJavascriptFunction(); 

function myOldJavascriptFunction() 
{ 
    //blahblahblah 
} 

这是很好的做法还是有更好的方式来做到这一点。现在这个工作现在还能工作吗?

回答

4

即使问题实际上是值得一downvote,因为你可以轻松回答所有这些问题通过搜索,我会给你一个提示。

referenceToElement.onclick = function() { alert('here'); }; 

是肯定没有的jQuery标准的事情。它是纯粹的Javascript,将属性添加到DOM引用,在这种情况下是匿名函数。但是,您现在基本上提出了两个问题。

  • 我们可以给这个匿名函数一个名字吗? => YES
  • 可以我们引用其被定义在别处的函数?=>是

给它一个名字,我们就可以创建一个命名函数表达式这样

referenceToElement.onclick = function myFunctionName() { alert('here'); }; 

要引用一个函数,我们只是通过它的名字

referenceToElement.onclick = myOldJavascriptFunction; 

最后,添加相同事件侦听器的jQuery语法如下所示:

$(referenceToElement).click(myOldJavascriptFunction); 
+0

我确实看过。大多数事件监听器的例子或者在html中定义它作为onclick,或者手动定义这个函数作为代码显示的第二个代码片段。我绊倒的地方实际上是括号。如果你仍然认为它值得一试,然后继续。 – OVERTONE

+0

+1的解释。另外,*命名的函数表达式*在IE8和IE8中的工作方式并不合适。 –

+0

@OVERTUNE:我只是在说一个简单的搜索,没有冒犯性! – jAndy

1

是的,你是非常接近正确的:

referenceToElement.onclick = myOldJavascriptFunction; 

注意缺少括号。这将对函数的引用传递给onclick事件。另外请注意,这是普通的旧JavaScript,而不是jQuery。这样做的jQuery方式更像:

$(referenceToElement).click(myOldJavascriptFunction); 
1

你的第一个例子是普通的javascript,与jQuery完全无关。如果你使用jQuery,该行应该是这样的:

$(referenceToElement).click(function() { ... }); 

但在任何情况下,它看起来像你的问题是关于匿名函数。您可以将功能分配给一个变量名,或者使用函数声明和名字仍然引用函数:

function myFunction() { ... } 

$(referenceToElement).click(myFunction);