以编程方式将元素添加到模态对话框

时间:2014-02-12 21:24:47

标签: javascript jquery sharepoint-2010 modal-dialog

我正在尝试以编程方式将div元素添加到SP2010中的模态对话框中。

以下是我已经尝试过的内容

此功能从主页面触发:

        function addDialogBanner(){
            var dbody = $(".ms-dialog").find("div[id$='MSO_ContentDiv']");

            var diaBanner = document.createElement('div');
            diaBanner.id = 'diaBanner';

            $(dbody).prependChild(diaBanner);

            $("#diaBanner").text("WOW. SUCH BANNER.");
        }

应该背负这个(它被添加到onload函数数组,也在主页面上):

        function addNewItemFix() {
            $(".ms-addnew").each(function () {
                if ($(this).is("a")) {
                    var gReference = $(this).attr("href");
                    var options = {
                        title: "New Item",
                        url: gReference
                    };

                    $(this).attr("onclick", "javascript:SP.UI.ModalDialog.showModalDialog({title: 'New Item',url:'" + gReference + "', dialogReturnValueCallback:RefreshOnDialogClose}); addDialogBanner(); return false;");
                }
            });

        }

我添加了该方法,因为自定义功能没有打开新项目的模式对话框。我遇到的问题是,在模式对话框甚至完成加载之前,我的脚本似乎正在执行,所以我的jQuery选择器都没有存在。我希望远离setTimeout,因为加载时间并不总是一致的。同样,我有数百个网站和数千个图书馆,这些图书馆无法进行个别修复。

我这样做的整个方式是错的吗?或者我错过了一些关键信息来使这个工作?

EDIT 2/14/14:

我发现使用单独的方法调用SP.UI.ModalDialog...实际上不会调用对话框。它将拉出对话框,然后重定向到aspx页面。有什么我想念的吗?

2 个答案:

答案 0 :(得分:1)

在代码中使用jQuery函数。 jQuery When

编辑 - 试试这个:

$(this).attr("onclick", "javascript:$.when(SP.UI.ModalDialog.showModalDialog({title: 'New Item',url:'" +     gReference + "', dialogReturnValueCallback:RefreshOnDialogClose})).then(function() {
   addDialogBanner();
   return false;
});");

但是,当函数不起作用时,请使用jQuery。

答案 1 :(得分:0)

您可以通过编辑表单本身在SharePoint设计器中的表单上插入脚本。 列表和库 - >选择列表 - >新表单按钮

插入:

$(document).ready(function() {
   //your scripts
 });

表单内任何位置的脚本标记。