ปิดกล่องโต้ตอบโมดอลโดยไม่ต้องรีเฟรชพาเรนต์

ฉันต้องปิดแบบฟอร์มที่กำหนดเอง (ซึ่งฉันแสดงในกล่องโต้ตอบโมดอล) และหยุดไม่ให้รีเฟรชไซต์หลัก

ฉันเรียกใช้ฟังก์ชันการปิดของฉันจากปุ่ม "ยกเลิก" แบบกำหนดเองเมื่อคลิก

customClose() { 
    //some code here
    window.frameElement.cancelPopUp();
}

<input type="button" value="Cancel" onclick="javascript:customClose()" />

แต่หากฉันปิดกล่องโต้ตอบด้วยวิธีนี้ ระบบจะรีเฟรชไซต์หลัก จะปิดโดยไม่รีเฟรชได้อย่างไร?

ป.ล. มันเป็นกล่องโต้ตอบโมดอลของ SharePoint

หมายเหตุ: ฉันไม่สามารถใช้ jQuery สำหรับสิ่งนี้ได้ ต้องการ js ล้วนๆ


person Gintas K    schedule 22.04.2016    source แหล่งที่มา
comment
คุณทำงานกับ SharePoint เวอร์ชันใด   -  person Thriggle    schedule 22.04.2016
comment
SharePoint Online (2013) @Thriggle   -  person Gintas K    schedule 25.04.2016


คำตอบ (1)


SharePoint มีวิธีการแสดงและปิดกล่องโต้ตอบโมดอลที่มีอยู่แล้วภายใน

สำหรับ SharePoint 2010 ให้ใช้ SP.UI.ModalDialog.commonModalDialogClose วิธีการ เพื่อปิดกล่องโต้ตอบโมดอลที่เปิดล่าสุด

นี่คือตัวอย่างที่ใช้ commonModalDialogClose เพื่อปิดกล่องโต้ตอบ หน้าต่างไม่ควรรีเฟรชเมื่อปิด

ExecuteOrDelayUntilScriptLoaded(showDialog,"sp.js");
function showDialog(){
    var dialogBody = document.createElement("div");
    var btnClose = document.createElement("button");
    btnClose.value = "Cancel";
    btnClose.innerHTML = "Cancel";
    btnClose.onclick = function(){SP.UI.ModalDialog.commonModalDialogClose(SP.UI.DialogResult.cancel,null);};
    dialogBody.appendChild(btnClose);
    SP.UI.ModalDialog.showModalDialog(
        {
            html:dialogBody,
            title:"Your Title Here",
            dialogReturnValueCallback:onClose
        }); 
}
function onClose(result,data){
    // this callback function lets you control what happens after the dialog closes
    switch(result){
        case SP.UI.DialogResult.invalid: 
            break;
        case SP.UI.DialogResult.cancel: 
            break;
        case SP.UI.DialogResult.OK: 
            window.location.reload();
            break;
    }
}
person Thriggle    schedule 22.04.2016
comment
ขอบคุณ! มันได้ผล. ปัญหาคือฉันมี { location.reload(); } บนกล่องโต้ตอบReturnValueCallback ตอนนี้ฉันใช้รหัสของคุณเพื่อตรวจสอบการโทรกลับและรีเฟรชเฉพาะเมื่อตกลงเท่านั้น - person Gintas K; 25.04.2016