#jquery #proxy #live
#jquery #прокси #ЖИВЫЕ КОНЦЕРТЫ
Вопрос:
Я хотел бы установить контекст для функции, чтобы ограничить ее выполнение только ее внутренними элементами.
$('#btn').live('click',function(){
$.proxy(test(),$(this).closest('div'));
});
function test(){
//doSomething
}
но контекст в функции test() — это не ближайший DIV, содержащий мою кнопку #btn, а вся страница.
Не могли бы вы мне помочь?
Ответ №1:
$.proxy возвращает функцию.
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'));
});
Это немного странно и неуклюже, но это должно делать то, о чем вы думаете. Есть большая вероятность столкнуться с проблемами асинхронности, потому что прокси запускается по щелчку. Не зная специфики вашей проблемы, я не знаю, нужно ли вам использовать прокси.
Ответ №2:
Изменение test()
на test
, похоже, ничего не меняет, странно, что это не работает — но после прочтения комментариев на странице jQuery для .proxy
— кажется, что он страдает от проблем и несоответствий. Я бы использовал что-то в этом роде:
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 /
Комментарии:
1. Объяснит ли даунвотер их причины? [Поощряя людей объяснять голоса, проголосовавшие против]( meta.stackexchange.com/questions/135 /… )
2. Downvoter, вероятно, не согласился (справедливо) с утверждением, что .proxy страдает от проблем и несоответствий. Лично у меня с этим проблем не было.