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

Javascript 以编程方式将元素添加到模态对话框,javascript,jquery,sharepoint-2010,modal-dialog,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.

我试图以编程方式将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.");
        }
        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;");
                }
            });

        }
它应该是这个的一部分(它被添加到onload函数数组中,也在母版页上):

我在中添加了该方法,因为自定义功能没有为新项目打开模式对话框。我遇到的问题是,我的脚本似乎是在模态对话框完成加载之前执行的,所以我的jQuery选择器都不存在。我想远离
setTimeout
,因为加载时间并不总是一致的。此外,我有数百个站点和数千个库,使单个修复变得不可能

我这一路走错了吗?还是我遗漏了一些关键信息来让这一切顺利进行

2014年2月14日编辑:


我发现使用单独的方法调用
SP.UI.ModalDialog…
实际上不会调用对话框。它将弹出对话框,然后重定向到aspx页面。是否缺少某些内容?

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

插入:

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

表单上任意位置的内部脚本标记。

在代码中使用jquerywhen函数

编辑-尝试以下操作:

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

但是,如果jQuery when函数不起作用,请尝试使用它。

我有数百个站点和数千个列表需要同时编辑,扩展是不确定的。如果没有一大群复制粘贴者,在每一份清单上都插入这些内容是不可能的。对不起,我应该这么说。无论出于什么原因,这会在AddNewItem表单的顶部打开第二个模态对话框。当您关闭它时,它将执行回发并删除原始表单。我更改了代码,将代码应用于onclick of$(this)属性,就像您拥有它一样。它似乎仍在尝试执行,而不是等待事件触发。调试时出现错误
对象不支持属性或方法“showModalDialog”
。这可能有助于实际读取您编辑的内容。我做了更改,现在它完全绕过了模态对话框。它将加载,并且似乎直接重定向到aspx页面。