2009-04-26 88 views
0

我试图用jQuery效果fadeTo显示一条错误消息,试图通过追加一个按钮并使用淡出来隐藏消息,但似乎不起作用。如何将事件绑定到附加元素?

我所做的是:

$("#sub_error") 
    .fadeTo(200, 0.1, function() 
    { 
    $("#sub_error") 
     .html(error.join("<br/><br/>")) 
     .append('<br/><input type="button" name="err_ok" id="err_ok" value="ok">') 
     .addClass('subboxerror') 
     .fadeTo(900,1); 
    }); 

$("#err_ok").click(function() 
{ 
    $("#sub_error").fadeOut("slow"); 
}); 

我在做什么错了,可能有人帮助我吗?

+0

在什么时候停止工作? – SilentGhost 2009-04-26 20:54:52

+0

重读故事之后,我再也不那么确定了。我不知道我的答案是否有帮助。 – 2009-04-26 21:01:49

回答

2

#err_ok元素首先不存在,因此.click()处理程序不会应用于它。

您可以通过将

$("#err_ok").click(function() { 
    $("#sub_error").fadeOut("slow"); 
}); 

的功能解决了这个和创造的DOM元素后调用该函数。

编辑:这应该是一个完整的解决方案:

$("#sub_error").fadeTo(200, 0.1, function() { 
    $("#sub_error") 
     .html(error.join("<br/><br/>")) 
     .append('<br/><input type="button" name="err_ok" id="err_ok" value="ok">') 
     .addClass('subboxerror') 
     .fadeTo(900, 1); 
    bindEvents(); 
}); 

function bindEvents() { 
    $("#err_ok").click(function() { 
     $("#sub_error").fadeOut("slow"); 
    }); 
} 

还有结合事件以后创建的DOM元素太多了“live”功能。

0

FWIW,存在关于JQuery错误跟踪器上的fadeTo/fadeOut错误的票据。

0

有几种方法可以做到这一点。一,你可以追加单击处理该元素是插入后:

$("#sub_error").fadeTo(200, 0.1, function() { 
    $("#sub_error") 
     .html(error.join("<br/><br/>")) 
     .append('<br/><input type="button" name="err_ok" id="err_ok" value="ok">') 
     .addClass('subboxerror') 
     .fadeTo(900, 1) 
     .find('#err_ok') 
     .click(function() { 
     $("#sub_error").fadeOut("slow"); 
     }); 
}); 

或两个,您可以使用实时事件处理程序,以便与“err_ok” ID的任何元素将获得的点击处理程序时,它是创建。

$('#err_ok').live('click', function() { 
    $('#sub_error').fadeOut('slow'); 
}); 
相关问题