我正在定义函数func1(); 我希望它采取一些参数,即
var func1(aaa, bbb){
//do something, anything!
};
然后我想稍后在文档中调用它:
$('#some_id').click(func1($this));
但它不起作用。
我已经搞砸了一段时间,但jquery / javascript至少处理用户定义函数的方式非常奇怪。 some1能为我提供简单的代码片段吗? THX
答案 0 :(得分:6)
如果要传递的只是$(this)
,则不需要参数,因为它在定义的函数中可用。
$('#some_id').click(func1);
但是,您无法添加如下参数:
$('#some_id').click(func1(param1, param2));
然后,对于您的函数定义,您只需
function func1() { }
如果您确实需要$(this)以外的参数,则需要执行以下操作:
$('#some_id').click(function () {
func1(aaa, bbb); });
答案 1 :(得分:5)
我假设您正在尝试确保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的第一个解决方案。
答案 2 :(得分:1)
应该是
function func1(aaa, bbb) { ... }
答案 3 :(得分:1)
这是一个简单的例子:
确保使用function
定义您的功能。然后当你想在jQuery中调用它时,you should use an inline function within click()
。
<div>Click Me!</div>
<div>Pick this one!</div>
<script type="text/javascript">
function func1(aaa, bbb)
{
alert('You clicked the DIV that said: "' + aaa.innerHTML + '" and ' + bbb);
};
$('div').click(function ()
{
func1(this, "that's ok.");
});
</script>
答案 4 :(得分:0)
由于$('#some_id').click(func1($this));
定义,您无法像.click(handler(eventObject))
那样执行此操作...如果您这样称呼它,$this
中的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);
答案 5 :(得分:0)
在Javascript中,您无法同时分配函数和传递参数。使用匿名函数......
$('#some_id').click(function() {
var arg1 = $(this);
var arg2 = 'whatever';
return func1(arg1, arg2);
});
如果您需要的唯一参数是this
,请指定函数参考...
$('#some_id').click(func1);