die () на отдельных элементах - PullRequest
0 голосов
/ 22 октября 2010

Я подключил несколько слушателей live (), чтобы автоматически совершать 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);

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

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

Ответы [ 2 ]

0 голосов
/ 22 октября 2010

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

0 голосов
/ 22 октября 2010

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

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

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

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

...