2009-10-25 54 views
6

我想知道哪一种上述方法是首选的,或者是您使用$(elem).click()进行简单操作的一般原则,以及< a onclick =“func(1,2,3,4);” >当单击元素时需要将参数传递给脚本?我一直试图只使用$(elem).click()来保持代码干净和简单,但是当你必须传递多个参数时,它会变得棘手,onclick =“”的函数调用看起来像是一个更好的解决方案。onclick =“func()”或.click()?

回答

5
$(elem).click(function() { 
    func(1,2,3,4); 
}); 

这似乎是你想要的,不是吗?

+0

但是,如果传递的参数给函数是唯一的每个元素,你可能有数百个这样的元素,它得到棘手做这种方式,所以这就是为什么我问是否在这些情况下,你应该e onclick =“func(1,2,3,4)”方法,或者应该坚持使用$(elem).click()。你当然可以将所有这些参数放入url查询字符串中,如foo = 1&bar = 2并将其放入href =“”和$(elem).click()中,使用$(this).href()来获取值,但是做onclick =“func()”会更有效率吗? – TheMagician 2009-10-25 03:38:52

+1

那么你应该使用html5数据属性来设置与每个相关元素相关的唯一值:'link' – geowa4 2009-10-25 03:48:34

+2

如果你有数百个这些元素,最有效的方法是使用[事件委托] [http://www.danwebb。 net/2008/2/8/event-delegation-made-easy-in-jquery],而不是每个元素的单独onclick处理程序。为了避免JS与HTML混在一起,可以将所需的参数存储在Javascript数据结构中,每个对象的键都是元素ID或类似元素。 – 2009-10-25 05:03:53

3

我更喜欢使用$(elem).click()来保持我的HTML无javascript,我认为它更干净。

7

jQuery背后的主要思想之一是不引人注意的JavaScript(即HTML和JavaScript是两种味道不好的味道)。使用jQuery对象和选择器来附加功能是他们希望你做的。

4

如果这些参数可以在点击的时候予以确定,我会建议 装订方法:

$('a').click(function(){ someFunc(this.val, 2, 3, 4); }) 

一个情况下,我能想到的直列做的,是如果你正在构建多在一个循环中,其中PARAMS 1,2,3或4个链接被按照后端变量或东西变化:

<% for(int i = 0; i < 4; i++) { %> 
    <a onclick="someFunc(1,<%= i %>,3,4"></a> 
<% } %> 

就个人而言,我总是试图绑定到事件在$(文件)。就绪()回电话。

希望这有助于

0

当你使用jQuery,您可以将参数传递给函数:

$(".selector").click(function() { func(1,"2", someVar); }); 

我喜欢总是使用jQuery我的事件处理。我不喜欢在我的HTML中放置任何行为,即使是onclick和相关事件。另外,如果你以编程方式点击使用$(".selector").click()的东西,并且你有一个使用onclick和jQuery连接的处理程序,它将首先调用jQuery处理程序,然后使用属性调用处理程序组。但是,如果你用鼠标点击,这是相反的方式。这可能是意想不到的,并最终让你头痛不已。

2

我与click()去为好,如果你有,你想传递给函数的附加参数,将它们添加到任何对象的属性,我通常使用rel这样的:

<a href="#" class="link" rel="parameter1, parameter2, etc">Link</a> 

在脚本中你可以这样做:

$('.link').click(function() { 
var parameters = $(this).attr('rel').split(','); 
// Do something 
return false; 
})