2010-12-20 61 views
1

我正在使用jQuery加载客户信息页面。有一个客户列表的链接旁边:jQuery UI对话框窗体,不发送正确的变量

<a href="#" onclick="load_customer(<?php echo $c->id; ?>);return false;">View</a> 

触发此功能:

function load_customer(id) { 
    $("#dashboard").load('get_info/' + id); 
} 

完美的作品。在我正在加载的页面中,我有一个用于添加新信息的jQuery UI模式对话框。

<div id="addinfo"> 
    <form><input type="hidden" name="customer_id" value="<?php echo $c->id; ?>" /></form> 
</div> 

我的javascript:

$("#addinfobutton").click(function(){ 
      $("#addinfo").dialog("open"); 
      return false; 
    }); 
    $("#addinfo").dialog({ 
      autoOpen:false, 
      width:400, 
      height:550, 
      modal: true 
    }); 

当您选择一个客户第一次,它正确地填充隐藏字段,但后来它甚至选择其他客户后保持不变。

我认为,通过加载一个新的客户页面,表单将重置以及...但显然它被存储/缓存的地方。如果我在页面的任何其他地方回显ID,它就会正确显示......只是不在“addinfo”div中。

任何帮助/建议,将不胜感激!谢谢!

+0

我假设你正在通过ajax加载一个新的客户页面?那也取代#addinfo格呢? – ifaour 2010-12-20 19:56:20

回答

1

JQuery的对话框的不重装为你打开它们时的内容。当打开对话框时,我倾向于使用AJAX调用来替换对话框所在的div的内容(或者调整其中的某些值)。

如果你想要一个隐藏的字段,那么我不会把它放在对话框中,你应该能够从对话框外部检索值。

0

经过一番研究,看起来对话框在被调用后被缓存在客户端。所以为了解决这个问题,我只是将customerId添加到弹出式div的ID名称的末尾......因此每个客户页面都会有一个唯一的对话ID。

但是,如果它正在缓存每个对话框,那么如果您打开很多对话框,是否会出现性能损失?如何清除它们而无需进行整页刷新?

0

我想如果#addinfo格被更新,应该抓住新的内容......反正这会关闭它,以确保一个新的实例将被创建后消除对话框:

$("#addinfobutton").click(function(){ 
    openDialog('#addinfo'); 
    return false; 
}); 
function openDialog(elm) { 
    $(elm).dialog({ 
     autoOpen:true, 
     width:400, 
     height:550, 
     modal: true, 
     close: function() { 
      $(this).dialog('destroy'); 
     } 
    }); 
} 
+0

谢谢!尽管如此,由于它没有明确说明元素是对话框,它实际上在页面上显示div。另外,当我试图在...之前销毁对话框时,它不会在任何其他点击中起作用。 – TerryMatula 2010-12-20 22:54:45

+0

我没有把你带到这里? “因为它没有明确说明元素是对话框,它实际上在页面上显示div”这是否意味着上面的代码适用于你? :-)如果它的工作原理,请接受答案,如果没有详细说明,以便能够帮助你.. – ifaour 2010-12-20 23:48:52

+0

对不起,不,它没有工作。当我使用它时,包含对话框窗体的div显示在页面上。我只想让它在我点击按钮时显示。 – TerryMatula 2010-12-21 18:58:30