2013-10-11 16 views
6

Ich möchte Confirmation Dialog anzeigen, wenn Benutzer ein Dokument aus EDITForm.aspx speichert. Also habe ich folgenden JavaScript-Code geschrieben.Wie man SP.UI.ModalDialog vom Knopfklick im Sharepoint schließt?

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

Jetzt habe ich folgende Abfragen.

  1. SubmitDlg und CloseDlg wird nicht ausgelöst, wenn Sie auf Senden oder Abbrechen klicken.
  2. Ist das die richtige Methode zum Senden des Formulars (SubmitDlg-Methode) und zum Abbrechen des Dialogfelds (CloseDlg-Methode) aus dem modalen Dialogfeld?
  3. Auch diese modale Dialogbox sollte nur dann angezeigt werden, wenn beim Speichern keine Validierungsfehler aufgetreten sind. Wenn ein Feldwert erforderlich ist und wir keinen Wert eingegeben haben, sollte er eingebaute rote Nachrichten anzeigen.

Dank

Antwort

5

in den Optionen für den modalen Dialog Sie müssen einen Verweis auf Ihre Rückruffunktion wie diese passieren:

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

SP.UI.ModalDialog.showModalDialog(opt); 

Dann können Sie den Status überprüfen in Ihrer Callback-Funktion:

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

}

Wenn Sie Sachen brauchen, um wieder aus dem Dialog senden können Sie verwenden:

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

Um diese Arbeit zu machen, müssen Sie eine Funktion auf die OK-Taste in der Server-Seite Code, so etwas Hook-up :

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

Mein modalen Dialog nur Kreuz-Symbol zeigt, nicht ok und Abbrechen-Taste :( – nbi

0

Add-Klasse "CloseSPPopUp" auf die BTN u klicken möchten

hinzufügen Dieses Script zu Seite zu schließen, die "CloseSPPopUp" BTN

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

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

nun auf Startseite, wo u rufen Popup

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

Grund: ms-dlgContent Klasse ist in Parent Seite & CloseSPPopUp in Iframe ist die zur Laufzeit erstellt wird