Проблема с функцией div, если контент подается через JQuery, а не жестко закодирован - PullRequest
0 голосов
/ 29 мая 2011

Моя проблема, вероятно, проще всего объяснить с помощью этой скрипки: http://jsfiddle.net/L3zVY/7/

Если щелкнуть изображение в правом верхнем углу окна, поля исчезнут (изображение отсутствует, поэтому это просто вопросmark).

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

Есть идеи?

Код:

$(document).ready(function() {
// Close notifications (fade and slideup)

        $(".notification a.close").click(function () {
            $(this).parent().fadeTo(400, 0, function () {
                $(this).slideUp(200);
            });
            return false;
        });


// JQuery Broken Notification:
    $("#msgbox1").html('Broken :( <a href="#" class="close"><img src="images/notification_close.png" alt="close" /></a>');

});

Ответы [ 2 ]

2 голосов
/ 29 мая 2011

Когда вы назначаете обработчик click, вставляемый элемент еще не существует, поэтому jQuery не может его найти.

Сначала вставьте элемент:

$(document).ready(function() {
    $("#msgbox1").html('...');
    $(".notification a.close").click(...);
});

или используйте .live() / .delegate():

$(document).ready(function() {
    $(".notification").delegate('a.close', 'click', function(){...});
    $("#msgbox1").html('...');
});

Обработчики событий всегда привязаны к элементу. Вы не можете связать что-либо с чем-то, что не существует. live / delegate для преодоления этой проблемы путем привязки обработчика событий вверх по дереву DOM (возможно из-за всплывающего события ) и проверки цели события.

1 голос
/ 29 мая 2011

http://jsfiddle.net/L3zVY/8/ Вам необходимо использовать функцию live () с jquery.

...