0

我的问题可能最容易从这个小提琴解释:http: //jsfiddle.net/L3zVY/7/

如果单击框右上角的图像,框会消失(图像不存在,因此它只是一个问号)。

如果我尝试动态操作这些框而不是对其进行硬编码,则此功能会由于某种原因丢失。

我这样做的原因是因为我有一个登录页面,它使用一个根据错误消息更改类的框。一切正常,除了能够关闭盒子......

有任何想法吗?

代码:

$(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>');

});
4

2 回答 2

2

当您分配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 树的上方绑定一个事件处理程序(可能是由于事件冒泡)并检查事件的目标来克服这个问题。

于 2011-05-29T12:59:00.837 回答
1

http://jsfiddle.net/L3zVY/8/ 您需要在 jquery 中使用 live() 函数。

于 2011-05-29T12:59:15.720 回答