【问题标题】:dialog("close") doesn't work inside ajax:success event handlerdialog("close") 在 ajax:success 事件处理程序中不起作用
【发布时间】:2013-05-09 13:36:15
【问题描述】:

我正在尝试使用 jQuery 对话框让用户登录。我正在使用 ajax 和设计。用户登录后,对话窗口应关闭。我将 dialog("close") 放在 bind("ajax:success") 中,但它不起作用并且出现错误:

"cannot call methods on dialog prior to initialization; attempt to call method 'close'"

代码:

$(function(){
$(" #sign_in").click(function(){
     $('<div id="box" >').dialog({
        open: function(){ 
                 var that=this;
                 $(this).load("/users/sign_in",function(){ 
                    $("#new_user").bind("ajax:success",function(evt,data,status,xhr){
                    $("div#utility").html('welcome'+data.user+' |<a href="/users/sign_out" data-method="delete" rel="nofollow">sign out</a> ') ;
                    $(that).dialog('close');
                      })
               })
             },
        title: 'Sign in '
        });
   });
}) 

谁能帮我找出问题所在?
谢谢

【问题讨论】:

  • 你能把它清理一下,不要把它弄得一团糟吗?
  • 感谢Tomcat让代码清晰,因为我试过了,但我没有做到

标签: jquery dialog initialization


【解决方案1】:

这里有一个问题的答案可能有助于解决您的问题。

jQuery: Load Modal Dialog Contents via Ajax

您还可以将对话框的选择器更改为$('#box').dialog({ ...

在您的 ajax 成功回调中(在您进行更改后)您可以执行 $('#box').dialog('close')

编辑: 这份工作?

$(function(){
$(" #sign_in").click(function(){
 $('#box').dialog({
    open: function(){ 
        $(this).load("/users/sign_in");
    },
    title: 'Sign in '
    });
});

$("#new_user").bind("ajax:success",function(evt,data,status,xhr){
    $("div#utility").html('welcome'+data.user+' |<a href="/users/sign_out" data-method="delete" rel="nofollow">sign out</a> ') ;
    $('#box').dialog('close');
   })
}) 

【讨论】:

  • 感谢 ajgiv,我尝试过使用 $('#box').dialog('close') 并且我尝试过 $('
    ').load(. ..)。对话()。但我总是遇到错误'无法在初始化之前调用对话框上的方法'。问题是当我想关闭对话框时,它已经存在了。
  • 您是否在某处为登录/注册部分执行 ajax 请求?
  • 是的,我从 /users/new 加载页面,我使用设计。一切正常,但登录后无法关闭对话框。我可以通过单击关闭按钮关闭对话框。
  • 我从stackoverflow.com/questions/15626675/… 得到了解决方案,它确实有效
猜你喜欢
相关资源
最近更新 更多
热门标签