1

假设我有 button #click

并假设我将点击事件绑定如下:

$('#click').click(function(){
   alert('own you'+'whatever'+$(this).attr('href'));
});

但我想this引用其他一些元素,比如说#ahref.

如果它是一个命名函数,我会简单地按名称引用它:

foo.call('#ahref');

.call()但是,如果该函数被称为内联并且没有名称,我该如何使用?

4

4 回答 4

4

您可以使用proxy函数来更改上下文:

$('#click').click($.proxy(function() {
    alert('own you'+'whatever'+$(this).attr('href'));
}, $('#ahref')));
于 2012-09-02T15:38:54.767 回答
2

您不能强制 jQuery 使用 jQuerythis想要的值以外的任何值调用函数。也就是说,您可以向 jQuery 传递一个函数,该函数通过以下方式调用您的this函数.bind()

$('#click').click(function() {
  // whatever
}.bind(someObject));

Function 原型上的.bind()方法返回一个函数,该函数使用您传递的对象调用原始函数(您的匿名事件处理程序)作为this. 它在较新的浏览器中,在 Mozilla 文档站点上有一个 shim。

编辑- 或者查看@dfsq 的答案,涉及$.proxy()jQuery 本身的类似功能。

于 2012-09-02T15:38:22.357 回答
1

也许我遗漏了一些东西,但是是什么阻止您直接访问其他元素?

$('#click').click(function(){
   alert('own you'+'whatever' + $('#ahref').attr('href'));
});
于 2012-09-02T15:38:14.923 回答
0

不是 100% 确定你在追求什么,但你可以像这样绑定上下文:

$('#click').click(function(){
   alert('own you'+'whatever'+this.attr('href'));
}.bind($('#ahref')));
于 2012-09-02T15:38:46.620 回答