Jquery Live和Proxy与上下文

时间:2011-05-10 07:17:20

标签: jquery proxy live

我想为函数设置一个上下文,以便将其执行限制为仅仅内部元素。

$('#btn').live('click',function(){
    $.proxy(test(),$(this).closest('div'));
});

function test(){
     //doSomething
}

但是test()函数中的上下文不是最近的DIV包含我的#btn按钮而是整个页面。 你能帮帮我吗?

2 个答案:

答案 0 :(得分:1)

$ .synchronous返回一个函数。

var mytest = function(){
// do something with `this` bound to the jquery collection to be 
// created in the future sometime 
}
$('#btn').live('click',function(){
  // reassign mytest to a new function proxying the context through 
  // a relative jquery collection
  mytest = $.proxy(mytest,$(this).closest('div'));
});

这有点奇怪和笨拙,但它应该做你想的。很有可能遇到异步问题,因为代理发生在点击上。在不知道问题的具体细节的情况下,我不知道使用代理是否是你需要的。

答案 1 :(得分:-1)

test()更改为test似乎没有什么区别,奇怪的是这不起作用 - 但在阅读.proxy的jQuery页面上的评论之后 - 似乎它受到问题和不一致的困扰。我会沿着这些方向使用:

HTML

<div>hello</div>

的jQuery

function test()
{
  alert($(this).html()); // Will alert hello
}

$(document).ready(function() {
    test.call($('div').get(0)); // I use .get() so only the DOM object is passed.
                                // That makes it more consistent with how jQuery 
                               // passes objects to .each, etc.
})

小提琴: http://jsfiddle.net/u8x22/