2012-01-09 159 views
0

嘿frenz我有一个jQuery UI对话框的问题。问题是,当我关闭对话框,然后点击触发它的链接时,它不会再弹出,除非我刷新页面或保存对话框中的任何数据。我用弹出jquery对话框

代码是:

<script type="text/javascript"> 

    $(document).ready(function() { 
     $(".openDialog").live("click", function (e) { 
      e.preventDefault(); 

      $("<div></div>") 
        .addClass("dialog") 
        .attr("id", $(this).attr("data-dialog-id")) 
        .appendTo("body") 
        .dialog({ 
         close: function() { 
          $(this).remove(); 
         }, 
         modal: true 
        }) 
        .load(this.href); 
     }); 

     $(".close").live("click", function (e) { 
      e.preventDefault(); 
      $(this).closest(".dialog").dialog("close"); 
     }); 
    }); 
</script> 
+0

也许用$'''。'对话框'来代替'''$(this).closest('。dialog')''''。小提琴:http://jsfiddle.net/jud4L/1/ – 2012-01-09 06:43:51

+0

你的代码工程 - http://jsfiddle.net/cJNfF/你使用哪个jQuery/jQueryUI版本? – BartekR 2012-01-09 06:52:06

+1

为什么不用'autoOpen:false'一次性创建对话框并打开/关闭它? – 2012-01-09 06:53:10

回答

0
  1. 什么@MattBradley说。
  2. 在这一行,.attr("id", $(this).attr("data-dialog-id")),您试图抓取新的<div>data-dialog-id属性,指定新的<div>id属性。我很肯定你打算将链接的data-dialog-id属性分配给新的<div>
  3. ​​3210是多余的。除非你的意思是“删除链接”,而不是对话框本身,在这种情况下,你将使用link而不是this(请参阅fiddle)。
  4. “从jQuery 1.7开始,不推荐使用.live()方法。使用.on()来附加事件处理程序。旧版本jQuery的用户应该优先使用.delegate(),而不是.live()。
    取自jQuery的live()文档。

$('body').on('click', '.openDialog', function (e) { 
    e.preventDefault(); 

    var link = $(this); 

    $("<div></div>") 
     .addClass("dialog") 
     .attr("id", $(link).attr("data-dialog-id")) 
     .appendTo("body") 
     .dialog({ 
      modal: true 
     }) 
     .load($(link).attr('href'), { 
      html: "<p>Text echoed back to request</p>" 
     }); 
}); 

$('body').on("click", '.close', function (e) { 
    e.preventDefault(); 
    $(this).closest(".dialog").dialog("close"); 
}); 

演示在这里:http://jsfiddle.net/Ag6wj/

+0

演示很棒,我在代码中做了同样的事情,但仍然无法正常工作。 – Nhuren 2012-01-09 07:35:18

0

我能得到它的注射用沙漏/纺车另一个div来上班“请等待”加载图像。 (我使用jQuery-1.7.1)

尝试更换这行:

$("<div></div>") 

有了这个:

$("<div><div style='text-align: center'><img src='@Url.Content("~/Content/images/loading.gif")' alt='Please Wait...' width='100px'/></div></div>") 

这是我工作的代码(完全按照原职,除了对于一行):

// these are for the popup dialogs 
// need to use live instead of click because object doesnt exist on ready and will give an objectexpected 
$(".openDialog, .editDialog").live("click", function(e) { 
    e.preventDefault(); 

    // this div is duplicate of 'loading' div below 
    $("<div><div style='text-align: center'><img src='@Url.Content("~/Content/images/loading.gif")' alt='Please Wait...' width='100px'/></div></div>") 
     .addClass("dialog") 
     .attr("id", $(this).attr("data-dialog-id")) 
     .appendTo("body") 
     .dialog({ 
      // NOTE: This is where the size of the popup window is set 
      width: 800, 
      position: 'top', 
      title: $(this).attr("data-dialog-title"), 
      close: function() { $(this).remove(); }, 
      modal: true 
     }) 
     .load(this.href); 
});