在第二次加载对话框时未加载的jquery对话框中的ajax内容(post)

时间:2012-07-09 19:29:31

标签: jquery ajax dialog

我有一个页面,我点击按钮加载对话框:

function editShowSchedule(emId){
    $(".ui-dialog-content").dialog("close");            
    var url = "inc/ajax/schedule-editShowSchedule.php?emId="+emId+"&stationId="+<?php echo $stationId;?>;   
    var container = '<div id="somediv" title="Modifier l\'horaire d\'une émission"></div>';
    $(container).load(url).dialog({
       //modal:false,
       height: 600,
       width: 600,
       resizable: false,
       buttons: { "Annuler": function() { $(this).dialog("close"); },
               "Sauvegarder": function(){ saveShowSchedule();} }
    });
}

然后,在该对话框中,我在下拉框中触发.change()以加载相对于所选元素的信息。

<?php 
$emId = $_POST['emId'];
$stationId = $_POST['stationId'];
?>  

[...]

$(document).ready(function() {  
$("#selectShow").unbind('change');
$("#selectShow").change(function(){
    $("#showTimelines").html('En chargement');
    var emId = $("#selectShow").val();
    var stationId = <?php echo $stationId;?>;
    var params = {emId:emId,
                  stationId:stationId}
    $.post('inc/ajax/schedule-getAllTimelinesByEmId.php',params, function(data){ 
            alert('getTimelineByEmId');
            $("#showTimelines").html(data);             
            $(".button, button, input:submit, input:button").button();  
            enableAddRecurrenceInPeriod();
            enableRecurrenceCloseBox();
        },"html"  
    ); 
})<?php if($emId > 0){?>.change()<?php }?>;
});

第一次,它运作正常。

但是,如果我关闭对话框并且只是再次打开它,那么警报实际上有效,但我看不到$(“#showTimelines”)。html(甚至没有加载消息:$(“ #showTimelines“)。html('En chargement');),即使我在firefox中看到它并且我只在文档加载后才发帖...

有人知道为什么和/或如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果你拆分这两个步骤它应该有效:创建对话框一次(例如,在文档就绪),只需单击按钮调用'open'(你仍然可以正常更新对话框的内部html) )。

来自jquery ui docs

调用$(foo).dialog()将初始化一个对话框实例,并默认自动打开该对话框。 如果您想重复使用对话框,最简单的方法是禁用“自动打开”选项

$(foo).dialog({ autoOpen: false }) 
  and open it with
$(foo).dialog('open'). 
  To close it, use 
$(foo).dialog('close')

答案 1 :(得分:0)

啊,我明白了。感谢Felipe带领我走上正轨: 我改变了我的jquery:

function editShowSchedule(emId){
$(".ui-dialog-content").dialog("destroy");  
$("#somediv").remove();     
var url = "inc/ajax/schedule-editShowSchedule.php?emId="+emId+"&stationId="+<?php echo $stationId;?>;   
var container = '<div id="somediv" title="Modifier l\'horaire d\'une émission"></div>';
$(container).load(url).dialog({
    //modal:false,
    height: 600,
    width: 600,
    resizable: false,
    close: function(event, ui){
        $(this).dialog("destroy");
        $("#somediv").remove();
    },
    buttons: { "Annuler": function() { $(this).dialog("destroy"); 
                                       $("#somediv").remove(); },
               "Sauvegarder": function(){ saveShowSchedule();} }
});

}

基本上,关闭实际上只是隐藏了对话框。使用destroy现在擦除它,但是它将容器留在原位,虽然是隐藏的(因此更新了那个而不是用我的ajax创建的新对话框),所以我通过调用$(“#somediv”)完全删除它.remove( );

现在,一切正常!