Изучение .delegate () на функции ... Не могу использовать .bind - PullRequest
0 голосов
/ 31 августа 2011

Вот jsfiddle, jsfiddle.net / kqreJ

Так что я использовал .bind без проблем для этой функции, но затем я загрузил больше обновлений на страницуи обнаружил, что .bind не работает для контента, импортированного на страницу, а только для контента, уже находящегося на странице!Отлично!

Так что я переключил его на .delegate, что довольно круто, но теперь я не могу понять, как .bind .unbind моей функции, как это было ???

$('#maindiv').undelegate(".open","mouseup").delegate(".open","mouseup",function(event){
var $this = $(this), handler = arguments.callee;
$this.unbind('mouseup', handler);
var id = $(this).attr("id");
var create = 'nope';

    var regex = /\d+$/,
    statusId = $('#maindiv .open').toArray().map(function(e){
        return parseInt(e.id.match(regex));
    });

var divsToCreate = [ parseInt(id) ];

$.each(divsToCreate, function(i,e)
{
    if ( $.inArray(e, statusId) == -1 ) {
        create = 'yup';
    }
});

        if( create == 'yup' ) {
            if(id) {
                    $.ajax({
                    type: "POST",
                    url: "../includes/open.php",
                    data: "post="+ id,
                    cache: false,
                    success: function(html) {
                    $('.open').html(html);
                    $this.click(handler);
                    }
                    });
            }
        }

});

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

1 Ответ

0 голосов
/ 31 августа 2011

Измените bind на live и ничего не меняйте ... посмотрите, работает ли оно. live() связывает динамически загружаемый контент, например delegate. чтобы отменить привязку live Я полагаю, вы используете die.

Обновление

Вот как я бы это сделал при условии, что все, что вы хотите сделать, - это onClick добавить div, если он еще не существует на странице, и если div существует, выделите его. Мне пришлось выбросить твой старый код, это было слишком запутанно, я пошел строго по твоему требованию.

Имейте в виду, что, поскольку делегат является динамическим, он связан с вашим селектором, удаляет класс или меняет идентификатор, и привязка автоматически удаляется из этого класса. В моем примере у меня есть 2 метода делегата. В основном, изменяя класс, я меняю вызываемую функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...