J'utilise alert()
pour renvoyer mes erreurs de validation à l'utilisateur car ma conception ne prévoit rien d'autre, mais je préfère utiliser la boîte de dialogue jQuery UI comme boîte de dialogue d'alerte pour mon message.
Étant donné que les erreurs ne sont pas contenues dans un div (html), je ne sais pas comment procéder. Normalement, vous affecteriez la dialog()
à un div disons $("#divName").dialog()
mais j'ai plus besoin d'une fonction js quelque chose comme alert_dialog("Custom message here")
ou quelque chose de similaire.
Des idées?
Je ne pense pas que vous ayez même besoin de le joindre au DOM, cela semble fonctionner pour moi:
$("<div>Test message</div>").dialog();
Voici un violon JS:
En utilisant certaines des informations ici, j'ai fini par créer ma propre fonction à utiliser.
Pourrait être utilisé comme ...
custom_alert();
custom_alert( 'Display Message' );
custom_alert( 'Display Message', 'Set Title' );
remplacement de l'alerte jQuery UI
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' );
}
}
});
}
Il suffit de jeter un div vide et caché sur votre page html et de lui donner un ID. Ensuite, vous pouvez l'utiliser pour votre boîte de dialogue d'interface utilisateur jQuery. Vous pouvez remplir le texte comme vous le feriez normalement avec n'importe quel appel jquery.
S'appuyant sur la réponse d'eidylon, voici une version qui n'affichera pas la barre de titre si TitleMsg est vide:
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();
}
voir jsfiddle
Comme mentionné par nux et micheg79, un nœud est laissé dans le DOM après la fermeture de la boîte de dialogue.
Cela peut également être nettoyé simplement en ajoutant:
$(this).dialog('destroy').remove();
à la méthode de fermeture de la boîte de dialogue. Exemple d'ajouter cette ligne à la réponse d'eidylon:
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();
}
});
}
EDIT: J'ai eu des problèmes pour exécuter la fonction de rappel et j'ai constaté que je devais ajouter des parenthèses () à onCloseCallback pour réellement déclencher le rappel. Cela m'a aidé à comprendre pourquoi: En JavaScript, cela fait-il une différence si j'appelle une fonction entre parenthèses?
DAlert jQuery UI Plugin Vérifiez ceci, cela peut vous aider
J'ai pris la réponse de @ EkoJR et ajouté un paramètre supplémentaire à transmettre avec une fonction de rappel qui se produit lorsque l'utilisateur ferme la boîte de dialogue.
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
});
}
Vous pouvez ensuite l'appeler et lui passer une fonction, qui se produira lorsque l'utilisateur fermera la boîte de dialogue, comme suit:
jqAlert('Your payment maintenance has been saved.',
'Processing Complete',
function(){ window.location = 'search.aspx' })
Utilisez cette syntaxe de code.
$("<div></div>").html("YOUR MESSAGE").dialog();
cela fonctionne mais il ajoute un nœud au DOM. Vous pouvez utiliser une classe, puis supprimer d'abord tous les éléments de cette classe. ex:
function simple_alert(msg)
{
$('div.simple_alert').remove();
$('<div></div>').html(is_valid.msg).dialog({dialogClass:'simple_alert'});
}
Il y a un problème: si vous fermez la boîte de dialogue, elle exécutera la fonction onCloseCallback. Ceci est une meilleure conception.
function jAlert2(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": onCloseCallback,
"Cancel": function() {
$( this ).dialog( "destroy" );
}
},
});