web-dev-qa-db-fra.com

Comment fermer SP.UI.ModalDialog en SharePoint?

Je souhaite afficher la boîte de dialogue de confirmation lorsque l'utilisateur enregistre un document à partir de EDITForm.aspx. J'ai donc écrit le code JavaScript suivant.

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);
}

Maintenant, j'ai les requêtes suivantes.

  1. SubmitDlg et CloseDlg ne sont pas déclenchés lorsque vous cliquez sur Soumettre ou Annuler.
  2. Est-ce une bonne façon de soumettre le formulaire (méthode SubmitDlg) et le dialogue Annuler (méthode CloseDlg) à partir du dialogue modal?
  3. De plus, cette boîte de dialogue modale ne doit apparaître que si aucune erreur de validation lors de la sauvegarde n’a été enregistrée. Cela signifie que si une valeur de champ est requise et que nous n’avons mis aucune valeur, elle doit alors afficher des messages de couleur rouge intégrés.

Merci

7
mit

dans les options de la boîte de dialogue modale, vous devez transmettre une référence à votre fonction de rappel comme ceci:

var opt = SP.UI.$create_DialogOptions();
opt.width = 500;
opt.height = 200;
opt.url = url;
opt.dialogReturnValueCallback = MyDialogClosed;

SP.UI.ModalDialog.showModalDialog(opt);

Ensuite, dans votre fonction de rappel, vous pouvez vérifier le statut:

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'    }

}

Si vous avez besoin de renvoyer des éléments de votre boîte de dialogue, vous pouvez utiliser ceci:

function okClicked()
{
    SP.UI.ModalDialog.commonModalDialogClose(1, someobject);
}

Pour que cela fonctionne, vous devez associer une fonction au bouton OK dans le code côté serveur en utilisant quelque chose comme ceci:

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);
    }
5
Chaholl

ajouter la classe "CloseSPPopUp" au btn u voulez cliquer pour fermer

Ajouter ce script à la page qui a "CloseSPPopUp" btn

$('.CloseSPPopUp').click(function(){            
window.top.CloseSPUIPopoup();       
});

$('.CloseSPPopUp').click(function(){
window.top.CloseSPUIPopoup();
});

Maintenant sur la page principale où vous appelez popup

function CloseSPUIPopoup{
$(".ms-dlgContent").hide();
}

Raison: la classe ms-dlgContent est dans la page parent et CloseSPPopUp est dans l'iframe créé à l'exécution

0
Vivek Dhanuka