Вы абсолютно правы. При уничтожении диалога #f не убирается с DOM.
Вот исправленный вариант:
function showUrlInDialog(url, title){
var tag = $("<div></div>");
$.ajax({
url: url,
success: function(data) {
tag.html(data).dialog({modal: true,
buttons : {
Ok: function() {
$.post(url, $("#f").serialize(),function(datar) {
$("#f").find('.error').remove();
if (datar.success == true) {
tag.dialog('destroy');
$("#f").remove();
window.location.reload(); }
else { display_form_errors(datar['data'], $('#f'));}
});
},
Cancel: function() {
tag.dialog('destroy');
$("#f").remove();
return false;
}
},
width: 'auto', title: title }).dialog('open');
}
});
}
function display_form_errors(errors, $form) {
for (var k in errors) {
$form.find('input[name=' + k + ']').after('<div class="error">' + errors[k] + '</div>');
}
}
Спасибо за ценные наводки.