0

我有一个菜单,菜单中的每个链接都使用模式对话框打开。我试图避免每次单击链接多次时都创建相同的对话框。

我试过检查

if(outputHolder.hasClass('ui-dialog-content:visible')){return false;} 
 $("body").append(outputHolder);
 outputHolder.load($this.attr("href"), null, function() {      
 outputHolder.dialog(

否则它将显示对话框..

有什么建议么??

完整代码

http://jsfiddle.net/6qgTr/5/

4

2 回答 2

1

您希望它只在第一次显示对话框时进行 ajax 调用,但在随后的单击中,对话框会重新显示而不会重新进行 ajax 调用,对吗?

如果是这种情况,我认为您首先必须摆脱以下代码,因为它会在对话框关闭时删除对话框的元素。没有它,元素​​将保留,但会被隐藏。

close: function(event, ui) { $(this).remove(); }

您还需要跟踪对话框 div 元素,以便可以重复使用它们。你可以使用这个.data()方法。

function openDialog($dialogDiv) {
    $dialogDiv.dialog({
        // options, but not including 'close'
   });
}

function loadEmployeesShow(link) {
    var $link = $(link),
        $dialogDiv = $link.data('dialogDiv');
    if (!$dialogDiv) {
        console.log('creating new dialog');
        $dialogDiv = $('<div>');
        $link.data('dialogDiv', $dialogDiv);
        $dialogDiv.load($link.attr('href'), function() { openDialog($dialogDiv); });    
    } else {
        console.log('reusing existing dialog');
        openDialog($dialogDiv);
    }
};

jsfiddle

于 2013-04-11T01:41:35.113 回答
0

您应该首先在您的 html 代码中创建一个 div,该 div 将用作对话框的基础,而不是动态创建它。然后,您可以打开和关闭同一个对话框,而不是每次都创建一个新对话框。

还要将所有 JavaScript 代码与 HTML 分开。

在您的对话设置中,您拥有的第一个选项是bgiframe: true这不是对话的有效选项。

您将无法使用来自的数据加载对话框https://www.google.com.ar

引用jQuery ajax 页面

由于浏览器安全限制,大部分“Ajax”请求都受同源策略的约束;请求无法从不同的域、子域或协议成功检索数据。

您必须指向您自己的服务器上的一个脚本,该脚本将执行您需要的任何检索。

我用我认为你想要的东西创造了一个新的小提琴。

于 2013-04-10T23:16:36.850 回答