如何在仅使用函数名进行Jquery更改时传递参数?

时间:2013-12-10 09:27:44

标签: jquery

如果我有一个功能:

function doSomething() {
   ///
}

我可以使用.change,如下所示:

$("input[name='bla']").change(doSomething);

然而,如果函数是:

怎么办?
function doSomething(bla) {
   ///
}

我想将“this”作为参数传递给函数?这似乎不起作用:

$("input[name='bla']").change(doSomething(this));

有什么想法吗?

更新

我不想要这个:

$('a.link').change(function (e) { doSomething($(this)); } );

我想要这样:(但正确的语法将起作用)

$('a.link').change( doSomething($(this)) );

5 个答案:

答案 0 :(得分:3)

http://api.jquery.com/change/以及所有其他jquery事件 有一个事件处理程序的变体,它接受eventData作为第一个参数。

.change( [eventData ], handler(eventObject) )

但在这种情况下,你的处理函数会在eventObject

中查找eventData

http://api.jquery.com/event.data/

因此,您的函数看起来像这样使用此变体。

var that = this;
$("input[name='bla']").change({otherThis:that}, doSomething);

function doSomething(e) {
   var $this = $(this);
   var otherThis = e.data.otherThis;
}

我添加了

var $this = $(this);

显示

$this

$("input[name='bla']")

改变了。 希望有所帮助。

答案 1 :(得分:0)

怎么样

$("input[name='bla']").change(doSomething($(this)));

我认为你可以在jquery中使用$(this)来引用对象。

答案 2 :(得分:0)

jQuery自动将函数调用与this绑定。你不必传递$(this)。 仅当您要将其父级的上下文解析为该函数时。

例如:

$('a.link').change(function (a) {
     console.log(a); // is event object
     console.log($(this)); // is the same as one match of $('a.link'). `this` is binded to the element 
});

(评论后) 或者你可以尝试:

$('a.link').change(function (e) { doSomething($(this)); } );

答案 3 :(得分:0)

使用jQuery,您可以使用$(this)来引用它,但请注意它将作为对象传递!!

答案 4 :(得分:0)

通常的解决方案是在闭包范围内使用变量:

var that = this;
('a.link').change(function (e) { doSomething($(that)); } );