2009-04-26 12 views
0

Ich habe versucht, eine Fehlermeldung mit dem Jquery-Effekt fadeTo anzuzeigen und versuchte, die Nachricht durch Anhängen einer Schaltfläche auszublenden und Ausblendung zu verwenden, scheint aber nicht zu funktionieren.Wie kann ich Ereignisse an das angehängte Element binden?

Was ich tat, war:

$("#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"); 
}); 

Was mache ich falsch, mir jemand helfen könnte?

+0

an welchem ​​Punkt hört es auf zu arbeiten? – SilentGhost

+0

Hmm nachdem ich die Frage erneut gelesen habe, bin ich mir auch nicht mehr so ​​sicher .. Ich weiß nicht, ob meine Antwort hilft. –

+0

Wenn ich auf den Button klicke, sollte das div-Element mit id ausgeblendet sein, aber das tut es nicht, und ich weiß nicht warum? Möglicherweise greift es nicht auf die angehängte Schaltfläche "err_ok" zu. – jarus

Antwort

2

Das #err_ok-Element existiert zunächst nicht, daher wird der .click() - Handler nicht angewendet.

Sie können dieses Problem lösen, indem

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

in Funktion setzen und die Funktion aufrufen, nachdem sie im DOM das Element zu schaffen.

Edit: Dies sollte eine vollständige Lösung sein:

$("#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"); 
    }); 
} 

Es gibt auch eine „live“ -Funktion, die auch Ereignisse Zukunft geschaffen DOM-Elemente binden.

+1

Sie können das Ereignis auch einfach an err_ok in der Funktion binden, in der es erstellt wird. – Shog9

+0

Vielen Dank Thomas, es hat funktioniert, ich vermutete, dass es nicht auf den angehängten Knopf zugreift ... danke;) – jarus

+0

Kein Problem. Ich hatte vorher das selbe Problem, brauchte eine Weile um das herauszufinden :-) –

0

FWIW, es gibt Tickets über FadeTo/FadeOut Bugs auf dem JQuery Bug Tracker.

0

Es gibt mehrere Möglichkeiten, dies zu tun. One, können Sie die Click-Handler an das Element anhängen, nachdem sie eingefügt:

$("#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"); 
     }); 
}); 

Oder zwei, können Sie das Live-Event-Handler verwenden, so dass jedes Element mit dem „ERR_OK“ id wird die Click-Handler erhalten, wann immer es ist erstellt.

$('#err_ok').live('click', function() { 
    $('#sub_error').fadeOut('slow'); 
}); 
Verwandte Themen