我想为函数设置一个上下文,以便将其执行限制为仅仅内部元素。
$('#btn').live('click',function(){
$.proxy(test(),$(this).closest('div'));
});
function test(){
//doSomething
}
但是test()函数中的上下文不是最近的DIV包含我的#btn按钮而是整个页面。 你能帮帮我吗?
答案 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页面上的评论之后 - 似乎它受到问题和不一致的困扰。我会沿着这些方向使用:
<div>hello</div>
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.
})