jquery ui 对话框 - live 不工作?

标签 jquery jquery-ui modal-dialog live

我正在使用此对话框:http://docs.jquery.com/UI/Dialog

要打开对话框,我这样做:

$('a.openModal').live("click", function() {
        var idArr = $(this).attr('id').split("OpenNote");
        var id = idArr[1];

        alert($(".modalNote#dialog-modal" + id).html());

        $(".modalNote#dialog-modal" + id).dialog('open');
        return false;
    });

此对话框用于在单击标题时显示注释内容。当我在页面加载时生成 html 时,这工作正常,但如果我动态添加 html,则对话框将无法打开。当它附加到 div 时也不会隐藏。

是否可以“即时”打开它?

编辑1:

我试过了,但还是没有结果...

$(document).delegate('a.openModal', 'click', function() {
    var idArr = $(this).attr('id').split("OpenNote");
    var id = idArr[1];

    alert($(".modalNote#dialog-modal" + id).html());

    $(".modalNote#dialog-modal" + id).dialog('open');
    return false;
});

编辑2:

这是完整、简化的示例:

HTML:

<div id="mlist">
    <!-- Modal for Viewing a Saved Note (called by a.modal4) -->
    <div class="modalNote2" id="dialog-modal106" title="Test (10.6.2010)">
        Content...
    </div>
    <!-- End of Modal --> 
</div>

<a href="#" class="openModal2">Add new</a>

JS:

//Global Script for Calling a Fourth Modal with a class of "modal4"
$(".modalNote2").dialog({
    autoOpen: false,
    width: 500,
    height: 375,
    position: ['center', 'center'],
    modal: true
});

$("#mlist").append("<div class=\"modalNote2\" title=\"Test (10.6.2010)\">fghfghfghfghfghsdf</div>");

$(document).delegate('a.openModal2', 'click', function() {

            $(".modalNote2").dialog('open');
            return false;
});

当我点击链接时,会添加新的模态 div,打开当前模态 div,但不会打开新模态 div,并且正在显示它。

编辑3

我遵循了这些说明,如果我这样做,事情会变得更加简单:http://blog.nemikor.com/2009/08/07/creating-dialogs-on-demand/

var $loading = $('<img src="/Content/images/ajax-loader.gif" alt="loading">');

    $('.openModal').each(function() {
        var $dialog = $('<div></div>')
   .append($loading.clone());
        var $link = $(this).one('click', function() {
            $dialog
    .load($link.attr('href'))
    .dialog({
        title: $link.attr('title'),
        width: 500,
        height: 300
    });

            $link.click(function() {
                $dialog.dialog('open');

                return false;
            });            

            return false;
        });
    });

但是 ajax 生成的链接问题仍然存在。

编辑 4 - 已解决!

终于找到解决办法了!

var $loading = $('<img src="/Content/images/ajax-loader.gif" alt="loading">');

    $(document).delegate(".openModal", "click", function() {
        var $link = $(this);
        var $dialog = $('<div></div>')
            .append($loading.clone())
   .load($link.attr('href'))
   .dialog({
       autoOpen: false,
       title: $link.attr('title'),
       width: 500,
       height: 300
   });

        $dialog.dialog('open');

        return false;

    });

最佳答案

发生这种情况是因为您将事件绑定(bind)到页面上当前的对象,因此当您随后注入(inject)新的 HTML 时,这些事件将不会绑定(bind)到它。如果您使用的是 jQuery 1.4,那么您可以使用 .delegate() 方法解决此问题,如下所示:

$(document).delegate('a.openModal', 'click', function(){
  // your .live code here
});

这会将事件绑定(bind)到文档,该文档始终存在,用于搜索选择器的实例。出于性能原因,您应该将 $(document) 替换为任何最接近的静态父级,该父级将始终包含您的选择器。

如果您使用的是早期版本的 jQuery,您应该查看 livequery 插件。我会提供一个链接,但我是在机场用手机回答这个问题的。 :)

关于jquery ui 对话框 - live 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3014150/

相关文章:

javascript - 可以在 Bootstrap 中关闭静态模式吗?

javascript - 使用带有 kineticJs 的 jquery 可拖动 UI 使元素对齐网格?

javascript - Fancybox 框不会弹出

jQuery BlockUI : Is it possible to run a function after a user hits the "enter" key?

jquery - 如何使用 jQuery UI 颜色动画将元素淡入某种颜色,然后返回其原始颜色?

jquery - 如何检测该项目已被放入同一可排序列表中

jquery - 序列化 jquery 可排序

jquery - 仪表板基础上有 5 个可排序的响应式网格

javascript - 使用 JavaScript 创建跳棋游戏

javascript - 如何使用 JQuery 选择表格中的所有文本框,不包括表格行中的最后一个