jQuery UI Alert Dialog als Ersatz für alert()

Lesezeit: 3 Minuten

Benutzer-Avatar
mauzilla

Ich benutze alert() um meine Validierungsfehler an den Benutzer zurückzugeben, da mein Design nichts anderes vorsieht, aber ich würde lieber den jQuery-UI-Dialog als Warndialogfeld für meine Nachricht verwenden.

Da Fehler nicht in einem (html) div enthalten sind, bin ich mir nicht sicher, wie ich das machen soll. Normalerweise würden Sie die zuweisen dialog() zu einem div sagen $("#divName").dialog() aber ich brauche mehr eine js-Funktion so etwas wie alert_dialog("Custom message here") oder etwas ähnliches.

Irgendwelche Ideen?

Benutzer-Avatar
Clive

Ich glaube nicht, dass Sie es sogar an das DOM anhängen müssen, das scheint für mich zu funktionieren:

$("<div>Test message</div>").dialog();

Hier ist eine JS-Geige:

http://jsfiddle.net/TpTNL/98

Benutzer-Avatar
EkoJR

Mit einigen der Informationen hier habe ich schließlich meine eigene Funktion erstellt, die ich verwenden kann.

Kann verwendet werden als…

custom_alert();
custom_alert( 'Display Message' );
custom_alert( 'Display Message', 'Set Title' );

jQuery UI Alert-Ersatz

function custom_alert( message, title ) {
    if ( !title )
        title="Alert";

    if ( !message )
        message="No Message to Display.";

    $('<div></div>').html( message ).dialog({
        title: title,
        resizable: false,
        modal: true,
        buttons: {
            'Ok': function()  {
                $( this ).dialog( 'close' );
            }
        }
    });
}

  • Absolut fabelhaftes kleines Skriptlet da! Danke fürs Schreiben! Siehe meine Antwort unten, wo ich ein bisschen dazu hinzugefügt habe …

    – Eidylon

    10. Februar 2015 um 19:12 Uhr


Aufbauend auf eidylons Antwort ist hier eine Version, die die Titelleiste nicht anzeigt, wenn TitleMsg leer ist:

function jqAlert(outputMsg, titleMsg, onCloseCallback) {
    if (!outputMsg) return;

    var div=$('<div></div>');
    div.html(outputMsg).dialog({
        title: titleMsg,
        resizable: false,
        modal: true,
        buttons: {
            "OK": function () {
                $(this).dialog("close");
            }
        },
        close: onCloseCallback
    });
    if (!titleMsg) div.siblings('.ui-dialog-titlebar').hide();
}

sehen jsfiddle

  • Schön, aber vielleicht möchten Sie nach dem Hinzufügen des Elements bereinigen. Sehen: jsfiddle.net/q91cauvf

    – Nux

    26. September 2016 um 21:54 Uhr

Werfen Sie einfach ein leeres, verstecktes div auf Ihre HTML-Seite und geben Sie ihm eine ID. Dann können Sie das für Ihren jQuery-UI-Dialog verwenden. Sie können den Text so ausfüllen, wie Sie es normalerweise bei jedem JQuery-Aufruf tun würden.

Benutzer-Avatar
Datenskript

Wie von nux und micheg79 erwähnt, bleibt ein Knoten im DOM zurück, nachdem der Dialog geschlossen wurde.

Dies kann auch einfach durch Hinzufügen von bereinigt werden:

$(this).dialog('destroy').remove();

zur close-Methode des Dialogs. Beispiel für das Hinzufügen dieser Zeile zu eidylons Antwort:

function jqAlert(outputMsg, titleMsg, onCloseCallback) {
    if (!titleMsg)
        titleMsg = 'Alert';

    if (!outputMsg)
        outputMsg = 'No Message to Display.';

    $("<div></div>").html(outputMsg).dialog({
        title: titleMsg,
        resizable: false,
        modal: true,
        buttons: {
            "OK": function () {
                $(this).dialog("close");
            }
        },
        close: function() { onCloseCallback();
                           /* Cleanup node(s) from DOM */
                           $(this).dialog('destroy').remove();
                          }
    });
}

BEARBEITEN: Ich hatte Probleme, die Rückruffunktion zum Laufen zu bringen, und stellte fest, dass ich Klammern () zu onCloseCallback hinzufügen musste, um den Rückruf tatsächlich auszulösen. Das hat mir geholfen zu verstehen, warum: Macht es in JavaScript einen Unterschied, ob ich eine Funktion mit Klammern aufrufe?

Benutzer-Avatar
Dilusha Gonagala

DAlert jQuery-UI-Plugin Probieren Sie es aus, das kann Ihnen helfen

Benutzer-Avatar
Eidylon

Ich habe die Antwort von @EkoJR genommen und einen zusätzlichen Parameter hinzugefügt, der mit einer Callback-Funktion übergeben wird, die auftritt, wenn der Benutzer den Dialog schließt.

function jqAlert(outputMsg, titleMsg, onCloseCallback) {
    if (!titleMsg)
        titleMsg = 'Alert';

    if (!outputMsg)
        outputMsg = 'No Message to Display.';

    $("<div></div>").html(outputMsg).dialog({
        title: titleMsg,
        resizable: false,
        modal: true,
        buttons: {
            "OK": function () {
                $(this).dialog("close");
            }
        },
        close: onCloseCallback
    });
}

Sie können es dann aufrufen und ihm eine Funktion übergeben, die ausgeführt wird, wenn der Benutzer den Dialog schließt, wie folgt:

jqAlert('Your payment maintenance has been saved.', 
        'Processing Complete', 
        function(){ window.location = 'search.aspx' })

1159260cookie-checkjQuery UI Alert Dialog als Ersatz für alert()

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy