【问题标题】:Jquery: dialog box only shows once per clickJquery:对话框每次点击只显示一次
【发布时间】:2010-01-16 17:43:36
【问题描述】:

我有一系列像这样的“链接和 div”:

<a class="pop" href="popup.asp?PD=12>Hotel XXX</a>
<div class="details" title="Hotel XXX"></div>

<a class="pop" href="popup.asp?PD=52>Hotel YYY</a>
<div class="details" title="Hotel YYY"></div>

...

我正在使用以下 javascript,它的效果非常好,除了每次点击我只能打开一次对话框

$('.pop').click(function(event) {
event.preventDefault();
$(this).next('div.details').load($(this).attr('href')).dialog({
    modal: false,
    height: 400,
    width: 500
});
})

我在某处读到我必须使用“autoOpen: false”功能,但我不知道该放在哪里...

拜托,你能帮忙吗? 谢谢

【问题讨论】:

  • 也许你应该看看This question on SO。看起来很像
  • 如果有帮助,当我尝试显示我确定存在的内容(如 div 的标题)时,我会得到“未定义”:像这样:$('.pop') .click(function(event) { event.preventDefault(); alert($(this).next('div.details').attr('title')); })

标签: jquery-ui dialog


【解决方案1】:

以 Jonathan 所做的为基础,并使用更接近原始点击功能的东西,这应该可以解决问题。

$(function(){

  $(".details").dialog({
    autoOpen:false
  });

  $('.pop').click(function(event) {
    event.preventDefault();
    $(this).next('div.details').html("").load($(this).attr('href')).dialog('open');
  })

});

通过提前声明对话框并使用autoOpen:false,我们正在设置它但不显示对话框。然后,您可以在具有对话框功能的元素上调用 dialog('open') 并将其打开。

【讨论】:

    【解决方案2】:

    经过测试,可以正常工作:http://jsbin.com/ikate

    我将对话框的初始化与链接的点击事件分开。点击事件只是找到它对应的对话框,并打开它。

    $(function(){
    
      $(".details").dialog({
        autoOpen:false
      });
    
      $("a.pop").each(function(i,o){
        $(this).click(function(e){
          e.preventDefault();
          $(".details:eq("+i+")").html("Dialog " + i).dialog('open');    
        });
      });
    
    });
    

    【讨论】:

    • 这并不能解决他的问题:尝试通过单击文本打开一个对话框,将其关闭,然后尝试重新打开同一个对话框。没用。
    • 感谢您的回答,乔纳森:我尝试了您的代码,但单击同一链接会再次打开对话框...如果我有 N 对“a/div”组,请单击 N 次同一个链接打开N个对话框最奇怪的是,每个对话框打开的标题都不一样(第一个是“Hotel XXX”,第二个是“Hotel YYY”等)