jquery对话框只能打开一次
全部- 我知道这个问题,但以前的解决方案似乎并不适用于我的情况。jquery对话框只能打开一次
我有一个简单的表,每行有多个记录,最后一列是删除超链接。我试图用对话框弹出并确认删除。如果我在对话框中使用div的显式名称(我将它定位在表格所在的div上面一个div的位置),这非常适用。我首先使用了一个破解,似乎解决了“只能打开一次”的问题,只要我命名对话框的div。我试图通用化代码,所以我宁愿避开显式命名对话框所在的div,而是指向prev div。这是第一次,但后续点击不:
<code>
$(".deleteLinkDiag a").livequery('click',function() {
var myParent = $(this).parents("div:eq(0)"); //container div to be replaced
var myDiag = $(myParent).prev("div"); //one div before container div
var urlLoad = $(this).attr("href");
$(myDiag).dialog('destroy');
$(myDiag).dialog({
bgiframe: true,
resizable: false,
height:140,
modal: true,
autoOpen: false,
overlay: {
backgroundColor: '#000',
opacity: 0.5
},
buttons: {
"Confirmz":function()
{
myParent.load(urlLoad, function() { });
$(this).dialog("close");
},
Cancel: function()
{
$(this).dialog("close");
}
},
//close: function(ev, ui) { $(this).dialog('destroy');}
});
$(myDiag).dialog('open');
return false;
});
</code>
任何想法?
好吧,所以希望这会帮助一些人在路上。我实际上遇到了两个问题:
- 如果您不'销毁对话框(),那么它在旧名称下并不存在于DOM中。这就是为什么第二次总是未定义的原因。
- 即使您销毁对话框,您仍然无法找到它。这是因为当对话框理论上将其返回到预初始状态时,它会通过将其放在body标签之前的DOM底部来执行此操作。因此,它不再处于“prev”或“prevAll”中。
我解决了这个问题,只需将对话框的名称设置为与调用div相同,并添加了“Diag”。然后我可以跟踪它,无论jquery在哪里。呼。
$(".deleteLinkDiag a").livequery('click',function() {
var urlLoad = $(this).attr("href");
var myParent = $(this).parents("div:eq(0)"); //container div to be replaced
var myDiag = myParent.attr('id') + 'Diag';
$("#" + myDiag).dialog({
bgiframe: true,
resizable: false,
height:140,
modal: true,
autoOpen: false,
overlay: {
backgroundColor: '#000',
opacity: 0.5
},
buttons: {
"Confirm":function()
{
myParent.load(urlLoad, function() { });
$(this).dialog("close");
},
Cancel: function()
{
$(this).dialog("close");
}
},
close: function(ev, ui) {
$(this).dialog("destroy");
}
});
$("#" + myDiag).dialog('open');
return false;
});
这似乎最有可能的问题在于实际的对话框div实际上没有被正确选择的事实。而且(就我所了解的情况而言)源于你的错误要求的更大问题。
如果你想引用一个特定的div,那么你应该引用该特定的div。然而,我听到你说你想引用一个特定的div(这实际上是用作对话框的唯一div),同时你说你害怕用一个ID引用该div。
基本上,如果只有一个,这些会用来作为对话格,然后接受并调用该分区的名称:
<div id="dialog"/>
。
myDiag = $('#dialog');
这样就不会混淆如果你选择正确的div。但是,如果我所说的不是某种原因的选项,那么您可以在指定myDiag
的位置设置萤火虫的中断点,以便您可以看到myDiag
实际上处于执行时间。
感谢您的回复。我不想通过ID来引用特定div的原因是因为我希望能够在多个页面上一般使用此功能(甚至可能在同一页面上有多组删除按钮),因此div ID可能会改变。我会试着用Firebug的建议。 – EvilPluto 2009-11-25 05:57:52
'var myDiag = $(myParent).prev(“div”);'总是为每个按钮选择不同的div,还是总是选择相同的div? – 2009-11-25 02:24:44
你可以上传一个例子来说明这不适合你吗?我发现很难想像 – 2009-11-25 03:15:31
确实如此:http://163.150.129.104/j/index。php 所以这个想法是,有两个数据表,每个数据表具有一个唯一的每行删除列,并且每个在表格div之前都有一个不同的对话框。第一次弹出对话框,但不是在此之后。如果我把对话框中的类的名称(“打开”),它的工作正常,但我希望能够只有一个div没有做这个函数的多个副本。 – EvilPluto 2009-11-25 17:15:02