2010-10-22 1 views
0

Я приложил некоторые живые() слушателей, чтобы автоматически принимать вызовы Ajax для каждой ссылки с AJAX в URL:умереть() на отдельные элементы

$("document").ready(function() { 
    $('a[href^="/ajax"]').live('click', call); 
}); 

function call(e, context, link) { 
    e && e.preventDefault(); 
    link = link || this; 
    if(typeof link == "string" || !$(link).hasClass("disabled")) { 
     newObj(SPZ.AjaxCall, link, context); 
    } 
}; 

Но иногда я хочу изменить это (так что я могу указать контекст, в котором найти функции обратного вызова), так что я написал метод JQuery, чтобы сделать это

$.fn.customAjax = function(context) { 
    return this.die().click(function(e){ 
     call.call(this, e, context); 
    }); 
}; 

$(".save").customAjax(myObj); 

у меня есть проблема, что если жить обработчик будет добавлен в коллекцию элементов я могу» t просто используйте die() на одном из этих элементов; die() работает только, кажется, если вы примените его ко всем элементам live().

Может ли кто-нибудь предложить обходное решение, которое подавит событие live()? И, в качестве сторонних, мнения людей о том, что команда jQuery меняет поведение die(), так что его можно использовать для удаления обработчиков live() для отдельных элементов; есть ли причины, по которым это было бы плохой идеей?

+0

Не 'die()', как 'live()', требует вызова сразу после селектора? Например, '$ ('a [href^="/ajax "]'). Die()' правильно, но 'this.die()' не является? –

+0

это, возможно, один из аспектов ограничений на die(), но если я заменю это селектором, который находит ссылку, на которую я нацеливаюсь, она все равно терпит неудачу. Проблема заключается в попытке умереть только для подмножества элементов. Живой обработчик был добавлен в – wheresrhys

ответ

0

Откуда: call? Я не вижу, чтобы это определялось где-то в этом разделе кода.

Кроме того, я думаю, что ваш this не относится к объекту jQuery, а к узлу DOM. Попробуйте обернув его:

$.fn.customAjax = function(context) { 
    return $(this).die().click(function(e){ 
     call.call(this, e, context); 
    }); 
}; 

$(".save").customAjax(myObj); 

+0

. Функции, зависающие от '. .fn', как в коде OP, автоматически получают' this', указывающие на текущий экземпляр объекта jQuery. Не нужно обертывать. –

+0

oops - добавит определение вызова в код выше. «this» - это объект jQuery: обработчик клика запускается с указанным мной контекстом. Беда в том, что сразу же после этого работает живой обработчик – wheresrhys

0

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