Javascript 如何从sharepoint中的按钮单击关闭SP.UI.ModalDialog?

Javascript 如何从sharepoint中的按钮单击关闭SP.UI.ModalDialog?,javascript,sharepoint-2010,showmodaldialog,Javascript,Sharepoint 2010,Showmodaldialog,我想在用户从EDITForm.aspx保存任何文档时显示确认对话框。因此,我编写了以下JavaScript代码 function PreSaveAction() { var _html = document.createElement(); _html.innerHTML = " <input type=\"button\" value=\"Submit\" onclick ='javascript:SubmitDlg();' /> <input typ

我想在用户从EDITForm.aspx保存任何文档时显示确认对话框。因此,我编写了以下JavaScript代码

function PreSaveAction() {

 var _html = document.createElement();
 _html.innerHTML = "  <input  type=\"button\"  value=\"Submit\"    onclick ='javascript:SubmitDlg();'  />  <input  type=\"button\"  value=\"Cancel\" onclick =\"javascript:CloseDlg();\"     /> </td>           </tr>   </tbody> </table>";


 var options = {
            title: "Confirm",
            width: 400,
            height: 200,
            showClose: false,
            allowMaximize: false,
            autoSize: false,
            html: _html           
        };
        SP.UI.ModalDialog.showModalDialog(options); 

}

function SubmitDlg() { 
   SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK);


}

function CloseDlg() {
     SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.Cancel);
}
函数PreSaveAction(){
var_html=document.createElement();
_html.innerHTML=“”;
变量选项={
标题:“确认”,
宽度:400,
身高:200,
showClose:false,
allowMaximize:false,
自动调整大小:false,
html:_html
};
SP.UI.ModalDialog.showModalDialog(选项);
}
函数SubmitDlg(){
SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.OK);
}
函数CloseDlg(){
SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.Cancel);
}
现在我有以下问题

  • 单击“提交”或“关闭”时,不会触发SubmitDlg和CloseDlg 取消
  • 从模态对话框提交表单(SubmitDlg方法)和取消对话框(CloseDlg方法)是否正确
  • 此外,仅当保存记录时没有验证错误时,才应显示此模式对话框,这意味着如果需要任何字段值,并且我们没有输入任何值,则它应显示在内置的红色消息中

  • 谢谢

    在模式对话框的选项中,您需要像这样传递回拨功能的引用:

    var opt = SP.UI.$create_DialogOptions();
    opt.width = 500;
    opt.height = 200;
    opt.url = url;
    opt.dialogReturnValueCallback = MyDialogClosed;
    
    SP.UI.ModalDialog.showModalDialog(opt);
    
    protected override void OnLoad(EventArgs e)
        {
            if (Master is DialogMaster)
            {
                var dm = Master as DialogMaster;
                if(dm != null) dm.OkButton.Attributes.Add(@"onclick", @"return okClicked();");
            }
    
            base.OnLoad(e);
        }
    
    然后,您可以在回调函数中检查状态:

    function MyDialogClosed(result, value) {
    if (result == SP.UI.DialogResult.Cancel) {
        //Cancel. Do whatever
    }
    else { //SP.UI.DialogResult.OK
        //User clicked OK. You can pickup whatever was sent back in 'value'    }
    
    }

    如果需要从对话框发回内容,可以使用以下方法:

    function okClicked()
    {
        SP.UI.ModalDialog.commonModalDialogClose(1, someobject);
    }
    
    要实现这一点,您需要在服务器端代码中的OK按钮上挂接一个函数,如下所示:

    var opt = SP.UI.$create_DialogOptions();
    opt.width = 500;
    opt.height = 200;
    opt.url = url;
    opt.dialogReturnValueCallback = MyDialogClosed;
    
    SP.UI.ModalDialog.showModalDialog(opt);
    
    protected override void OnLoad(EventArgs e)
        {
            if (Master is DialogMaster)
            {
                var dm = Master as DialogMaster;
                if(dm != null) dm.OkButton.Attributes.Add(@"onclick", @"return okClicked();");
            }
    
            base.OnLoad(e);
        }
    
    将类“ClosesPopup”添加到要单击关闭的btn

    将此脚本添加到具有“closespopup”btn的页面

    现在在主页上,您正在调用弹出窗口

    function CloseSPUIPopoup{
    $(".ms-dlgContent").hide();
    }
    
    原因:
    ms dlgContent类位于父页面中,CloseSPPopUp位于运行时创建的Iframe中

    我的模式对话框仅显示交叉图标“不确定”和“取消”按钮:(