Javascript 关闭动态创建的jQuery ui对话框
我正在创建一个用户信息编辑对话框,该对话框使用Javascript 关闭动态创建的jQuery ui对话框,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,我正在创建一个用户信息编辑对话框,该对话框使用$.post获取编辑用户信息,但我无法关闭此对话框,因为该对话框未使用任何HTML元素初始化 我正在尝试$('#editUser')。对话框('close'),但它不起作用 主体如下: <div id='userInfo'> <div class='user'> <span class='userId'>1</span> <span class='userName'>John
$.post
获取编辑用户信息,但我无法关闭此对话框,因为该对话框未使用任何HTML元素初始化
我正在尝试$('#editUser')。对话框('close')
,但它不起作用
主体如下:
<div id='userInfo'>
<div class='user'>
<span class='userId'>1</span>
<span class='userName'>John</span>
</div>
<div class='user'>
<span class='userId'>2</span>
<span class='userName'>Jane</span>
</div>
对话框按预期打开良好,但未按预期关闭
这是ajax脚本返回的对话框的HTML
<div id='editUser'>
<table>
<tr>
<td>Username</td>
<td><?php echo $user['name'] ?></td>
</tr>
<tr>
<td>Email</td>
<td><?php echo $user['email'] ?></td>
</tr>
<tr>
<td colspan='2'>
<input type='button' id='closeEditDialog' value='close' />
</td>
</tr>
</table>
</div>
用户名
电子邮件
如何关闭它?我可以使用
$(“#editUser”).remove()
删除对话框,但我需要关闭它而不是删除它。在创建对话框之前,您可能需要将该html插入DOM
var mydialog;
$(function() {
$('.user').click(function() {
var uid = $(this).find('span.userId').html();
$post('/e-val/user/edit.php', {id: uid}, function(html) {
mydialog = $(html);
mydialog.appendTo('body');
mydialog.dialog();
});
});
$('body').on('click', '#closeEditDialog', function() {
mydialog.dialog('close')
});
});
$("body").append(html);
$("#editUser").dialog();
至少如果你的对话框是这样显示的,没有什么可以阻止它关闭,你使用的是同一个选择器
编辑
另外,不要忘记.dialog()将初始化小部件,请尝试不要多次调用它。改为使用.dialog(“打开”)
最好是已经将对话框的div添加到html中,然后在其中附加服务器端代码以动态更新对话框的内容。$('editUser')。对话框('close')
无法工作,因为您从未使用$('editUser')
初始化对话框,因此,您也不能使用它来关闭它,您需要使用与创建它相同的处理程序
正如Gil&Trinh在这里所回答的:
只需先将对话框内容添加到DOM,然后初始化对话框:
$(function() {
$('.user').click(function() {
var uid = $(this).find('span.userId').html();
$post('/e-val/user/edit.php', {id: uid}, function(html) {
$(html).dialog();
});
});
$('body').on('click', '#closeEditDialog', function() {
$('#editUser').dialog('close')
});
});
$post('/e-val/user/edit.php', {id: uid}, function(html) {
$(html).appendTo('body');
$('#editUser').dialog( {autoOpen: false} );
});
autoOpen:false
将阻止对话框自动打开,并且可以使用$(“#editUser”)打开对话框。对话框('open')
可以随时打开。能否将代码发布到实际创建对话框的位置。当你调用$('#editUser').dialog('close')时,你在浏览器的错误控制台中得到了什么吗?它已经存在于javascript中了。不,我没有在firebug控制台上得到任何东西。您的代码和这个示例之间有什么不同吗:(除了AJAX请求之外)还有,$post
。你是说$.post
?这里是另一个使用AJAX的示例:。看起来对话框第一次运行正常,但随后会出现混乱。这就是你看到的问题吗?或者mydialog=$(html);mydialog.dialog()
plz请安装firebug或firefox控制台并复制返回错误,您可以尝试$(html).appendTo('body').dialog()代码>对话框工作正常!但它不会在单击“关闭”时关闭。因为您尚未将其添加到DOM,所以无法按ID选择它。必须先附加到document.body