假设我有按钮#click
,
假设我将点击事件绑定如下:
$('#click').click(function(){
alert('own you'+'whatever'+$(this).attr('href'));
});
但我希望this
指代其他元素,比如#ahref
。
如果它是一个命名函数,我会简单地引用它的名称:
foo.call('#ahref');
但是,如果函数是内联调用的并且没有名称,我如何使用.call()
?
您可以使用proxy
函数来更改上下文:
$('#click').click($.proxy(function() {
alert('own you'+'whatever'+$(this).attr('href'));
}, $('#ahref')));
您不能强制jQuery调用this
值不是jQuery所希望的值的函数。也就是说,您可以通过使用.bind()
:向jQuery传递一个函数,该函数调用具有预定this
的函数
$('#click').click(function() {
// whatever
}.bind(someObject));
Function原型上的.bind()
方法返回一个函数,该函数使用传递为this
的对象调用原始函数(匿名事件处理程序)。它在更新的浏览器中,Mozilla文档网站上有一个填充程序。
编辑—或者参见@dfsq的答案,该答案涉及jQuery本身的类似$.proxy()
函数。
也许我遗漏了什么,但是什么阻止了您直接访问另一个元素?
$('#click').click(function(){
alert('own you'+'whatever' + $('#ahref').attr('href'));
});
不能100%确定你想要什么,但你可以像这样绑定上下文:
$('#click').click(function(){
alert('own you'+'whatever'+this.attr('href'));
}.bind($('#ahref')));