2013-03-11 232 views
1

我想打开一个jQuery UI对话框,其中的HTML已由ajax加载,但我只得到警报。如何打开ajax加载的jQuery UI对话框?

$(document).on("click",'#dialog-button',function(){ 
     alert('this works'); 
     $('#dialog').dialog('open');//this doesn't 
    }); 

当我不使用ajax(和.on)将模板放入模板中时,我没有遇到任何问题。

对话框HTML由AJAX加载喜欢这个东西simular:

$.ajax({ 

type: "GET", 
dataType: "json", 
url: href, 

success: function(data){ 

$('#dialog-container').html(data.dialog); 

} 

}); 

而且在我的PHP,我会做这样的事情:

<?php 
//assign some variables 
$array = array('dialog' => $this->smarty->fetch('dialog.tpl')); 
echo json_encode($array); 
?> 

这工作:

$(document).on("click",'#dialog-button',function(){ 

    alert('this works'); 

    $('#dialog').dialog({ 

    autoOpen : true, 
    height : 500, 
    width : 1000, 
    modal : true, 
    buttons : { 

     save : function() { 

      sendForm(); 
      $(this).dialog('close'); 

     }, 

     cancel : function() { 

      $(this).dialog('close'); 

     }, 

     close : function(){ 

      allFields.vall('').removeClass('ui-sate-error'); 

     }, 

    } 

}) 

}) 
+0

你有没有包含jQuery Ui lib?并且似乎有一个额外的'});'。 – Jai 2013-03-11 18:00:56

+0

我使用的谷歌图书馆 – Tim 2013-03-11 18:32:13

回答

1

加载对话框内容后,您需要实际创建对话框:

success: function(data) { 
    $('#dialog-container').html(data.dialog); 
    $('#dialog').dialog({ 
     ..., 
     autoOpen: false 
    }); 
}, 

,然后你有上面的代码实际上将使其出现:

$(document).on("click",'#dialog-button', function() { 
    $('#dialog').dialog('open'); 
}); 

确保#dialog最初是隐藏的,否则对话的内容将出现在页面上,他们得到变成对话框之前。

+0

也,http://stackoverflow.com/questions/7375352/button-to-open-jquery-dialog-is-not-working – mhan 2013-03-11 18:10:44

+0

我做了你说的,并首先加载的内容,后我创建了对话框。它似乎没有任何不同之处。 – Tim 2013-03-11 18:21:51

+0

@ user2157854所以请添加您关于如何加载内容的问题细节 - 不要忘记这将是一个异步操作。 – Alnitak 2013-03-11 18:45:33

相关问题