First thing that strikes my eye: IDs should be unique. Change your IDs for A tags into classes, and see if that clears it up.
When you use jQuery selectors like '#something', the library uses "document.getElementById()" to find the elements. You cannot expect things to work if you're using the same "id" value for multiple elements; in fact you'll get results exactly as you describe. The fact that you're using "find()" to look for elements by shared "id" does not matter.
That problem aside, you need to be using "name" attributes for your form input fields anyway.
you don't have to change de IDs to classes. you just need unique ids to each element, so you can get the right one.
It looks to me as if many of the variables in your event handler functions (notably, "post" and "relatedDiscussion") are not declared with "var" in each function. I've tried to figure out exactly what that might do, but I got confused. Nevertheless, when you do not declare your local variables, they're global variables. That means that each function that sets "post" equal to some new value is changing the value used by "post" in all the other functions that may be active.
Change it to
var post = $(this);
etc.
You should use jQuery's live events to bind to the form instead of binding a click to each button after creation.
I posted an update to your script
I basically pulled out the form click functions and converted them to live functions
$(".cancel").live("click", function(){
$(this).closest(".post-comment-form").slideUp('',function(){ $(this).remove(); });
});
$(".preview").live("click", function(){
// Hier muss mit Ajax und der Datenbank gespielt
// werden um ein preview erstellen zu können
});
$(".submit").live("click", function(){
// Hier muss mit Ajax und der Datenbank gespielt
// werden um den Post abschicken zu können
});
I didn't use your post.triggerHandler("destroyForm");
function because frankly I've never used it before and I couldn't get it to work LOL.