Прикрепление ul - JQuery

0

Я добавляю список ul и его работу отлично, за исключением случаев, когда я пытаюсь добавить мою таблицу ul я назначаю класс start-dropdownClose который подключен к прослушивателю событий:

$(".start-dropdownClose").click(function(event){
    event.stopPropagation();
    $thisOne = $($(this).parent().attr('id'));
    alert($thisOne.selector);
    $("#" + $thisOne.selector).fadeOut();
});

Вот мой метод добавления:

IfpClientGui.prototype.updateFloors = function(floors){
    // updates floor list from master list of floors. 

    var ifpcg = this;
    var ifpc = ifpcg.getIfpClient();
    $("#floor_list").empty();
    $("#floor_list").append("<li class='start-dropdownClose'><a href='' onclick='return false;'>X</a></li>");

    for(var i = 0; i < floors.length; i++)
    {

        $link = $('<a href="javascript:void(0);">'+floors[i].ifpf_name+'</a>');
        $link.data("floor",floors[i]);
        $link.click(function(){         
            ifpcg.hideAllOptionBoxes();

            ifpc.displayFloor($(this).data("floor"));
            $(this).parent().find("#ifpOptionList").show();
        });

        var $floor = $('<li></li>');
        $floor.append($link);
        ifpcg.updateOptions(floors[i].groups,$floor);
        $("#floor_list").append($floor);

    }

}

Любые мысли или предложения относительно того, почему это происходит?

ifpClientGui событий находится в классе init ifpClientGui. Я даже попытался переместить событие, прослушиваемое на улицу, на $(document).read... но без успеха.

  • 0
    $thisOne = $($(this).parent().attr('id')); - выглядит неправильно, потому что $(this).parent().attr('id') возвращает идентификатор, а не селектор идентификатора. Я думаю, что это должно быть просто $thisOne = $(this).parent()
  • 0
    @arunpjohny никогда не входит в функцию
Теги:

2 ответа

3
Лучший ответ

$(".start-dropdownClose") применим только к элементам с этим классом, которые существуют во время выполнения этого кода. Когда вы добавите элементы с этим классом позже, они не будут привязаны к обработчику событий.

Попробуй это:

$('#floor_list').on("click", ".start-dropdownClose"), function(event){
  // Your code ...
});

Это означает, что слушатель находится в #floor_list (который, как я предполагал, всегда присутствует). Любой щелчок, происходящий на элементе, будет зарегистрирован, и если бы это произошло в конкретном классе, функция запускается.

  • 0
    Имеет смысл. Спасибо
0

Скорее всего, вы подключаете прослушиватель событий неправильно. Помните, что для динамически добавленных элементов вы должны использовать делегирование событий:

$("#floor_list").on(event_name, '.start-dropdownClose', fn);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню