Jquery Live и прокси с контекстом - PullRequest
0 голосов
/ 10 мая 2011

Я хотел бы установить контекст для функции, чтобы ограничить ее выполнение только своими внутренними элементами.

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

function test(){
     //doSomething
}

, но контекст в функции test () не является ближайшим DIV, содержащим мойКнопка #btn, но вся страница.Не могли бы вы помочь мне?

Ответы [ 2 ]

1 голос
/ 30 сентября 2011

$. 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'));
});

Это немного странно и неуклюже, но это должно делать то, что ты думаешь. Есть хороший шанс столкнуться с асинхронными проблемами, потому что прокси происходит по клику. Не зная специфики вашей проблемы, я не знаю, нужен ли вам прокси.

0 голосов
/ 10 мая 2011

Изменение 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.
})

Fiddle: http://jsfiddle.net/u8x22/

...