【问题标题】:jQuery UI Dialog - Keeping a clicked link inside an already open jQuery UI DialogjQuery UI 对话框 - 在已经打开的 jQuery UI 对话框中保持点击链接
【发布时间】:2011-01-19 23:58:40
【问题描述】:
<script type="text/javascript"> 
$(document).ready(function() {
    $('#mardicion').each(function() {
        var $link = $(this);


        $link.click(function() {
            var $dialog = $('<div></div>')
                .load($link.attr('href') + ' #content')
                .dialog({
                    autoOpen: false,
                    title: $link.attr('title'),
                    width: (pageWidth()*0.9),
                    height: (pageHeight()*0.9)
                });
                $dialog.dialog('open');

                return false;
        });
    });
});
</script>

当我单击链接时,我使用上述 javascript 加载页面,页面加载正确,但是当我单击对话框内的另一个链接时,单击的链接将在浏览器窗口中打开,而不是在对话框内。我听说使用点击处理程序是执行此操作的正确方法(链接在对话框中打开),但我不确定如何使用 jQuery UI Dialog 来实现它。

谢谢!

【问题讨论】:

标签: javascript jquery jquery-ui jquery-ui-dialog


【解决方案1】:

您将使用live() 函数。在某个时间(我猜是在页面加载时),您将单击事件处理程序附加到一定数量的 ID 为 mardicion 的项目。当页面加载到您的对话框中时,该页面内的链接,即使它们可能具有madicion ID,它们的点击事件也不会关联。

使用$('#madicion').live('click' , function(e) {}) 也可以捕获所有项目的点击事件,即使它们是稍后添加到页面中的。

附注:

  1. 您似乎误用了 ID 属性。每个 ID 只能有一个元素。看到 $('#XXX').each() 表明您有超过 1 个项目。处理这些事情的正确方法是给这些元素一个 CSS 类,并使用$('.XXX').each();
  2. 不需要使用each$('#XXX').click(function() { }) 将所述功能应用于每个元素。

【讨论】:

  • 难道我不应该在我正在加载的页面中处理或使用 live() 函数吗?在这种情况下(请参阅我在问题中的评论)'page3.html'?谢谢!
  • 否,因为您将该页面作为现有页面的一部分加载。所以它被添加到现有页面的 DOM 中。
猜你喜欢
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
相关资源
最近更新 更多