用params调用用户定义的函数
我正在定义函数func1(); 我希望它采取一些参数,即
var func1(aaa, bbb){ //do something, anything! };
那么我想稍后在doc中调用它:
$('#some_id').click(func1($this));
但它不起作用。
我已经搞砸了一段时间,但jquery / javascript至少处理用户定义函数的方式非常奇怪。 some1能为我提供简单的代码片段吗? 谢谢
如果要传递的只是$(this)
,则不需要参数,因为它将在定义的函数中可用。
$('#some_id').click(func1);
但是,您无法添加如下参数:
$('#some_id').click(func1(param1, param2));
然后,对于您的function定义,您只需拥有
function func1() { }
如果您确实需要$(this)以外的参数,则需要执行以下操作:
$('#some_id').click(function () { func1(aaa, bbb); });
我假设您正在尝试确保this
仍然引用了接收事件的元素。
试一试: http : //jsfiddle.net/jKM9s/
$('#some_id').click(function() { func1.call(this, 'somearg', 'somearg'); }); // now "this" references the element when func1 is called function func1(aaa, bbb){ //do something, anything! };
编辑:
如果你想要的只是引用了被点击的元素,那么请参阅@ phoffer的第一个解决方案。
它应该是
function func1(aaa, bbb) { ... }
这是一个简单的例子:
确保使用function
定义function
。 然后,当你想在jQuery中调用它时, 你应该在click()
使用内联函数 。
Click Me! Pick this one!
在Javascript中,您无法同时分配函数和传递参数。 使用匿名函数…
$('#some_id').click(function() { var arg1 = $(this); var arg2 = 'whatever'; return func1(arg1, arg2); });
如果您需要的唯一参数是,请指定函数参考…
$('#some_id').click(func1);
你不能像$('#some_id').click(func1($this));
那样做$('#some_id').click(func1($this));
因为.click(handler(eventObject))
定义…如果你这样调用它, func1($this)
将被期望作为eventObject
。
为此,您可以使用.bind()
和event.data
。
演示
例如..
function sum(event) { alert(event.data.x + event.data.y); // `this` here would refer to the element calling this function // for example, $(this).attr('id') would return `someID` if called below }
称之为
$('#someID').bind('click',{x:4, y:5}, sum);