Я добавляю список 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...
но без успеха.
$(".start-dropdownClose")
применим только к элементам с этим классом, которые существуют во время выполнения этого кода. Когда вы добавите элементы с этим классом позже, они не будут привязаны к обработчику событий.
Попробуй это:
$('#floor_list').on("click", ".start-dropdownClose"), function(event){
// Your code ...
});
Это означает, что слушатель находится в #floor_list
(который, как я предполагал, всегда присутствует). Любой щелчок, происходящий на элементе, будет зарегистрирован, и если бы это произошло в конкретном классе, функция запускается.
Скорее всего, вы подключаете прослушиватель событий неправильно. Помните, что для динамически добавленных элементов вы должны использовать делегирование событий:
$("#floor_list").on(event_name, '.start-dropdownClose', fn);
$thisOne = $($(this).parent().attr('id'));
- выглядит неправильно, потому что$(this).parent().attr('id')
возвращает идентификатор, а не селектор идентификатора. Я думаю, что это должно быть просто$thisOne = $(this).parent()