Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关闭动态创建的jQuery ui对话框_Javascript_Jquery_Jquery Ui - Fatal编程技术网

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