¿Cómo implementar el diálogo de “confirmación” en el diálogo de JQ UI?

Intento utilizar el cuadro de diálogo de la interfaz de usuario de JQuery para reemplazar el feo cuadro javascript:alert() . En mi caso, tengo una lista de elementos, y junto a cada uno de ellos, tendría un botón de “eliminar” para cada uno de ellos. la configuración de psuedo html será algo así:

  
Are you sure?

En la parte JQ, en el documento listo, primero configuro el div para que sea un cuadro de diálogo modal con el botón necesario, y configuro esas “a” para que se activen antes de la confirmación, como:

 $("ul li a").click(function() { // Show the dialog return false; // to prevent the browser actually following the links! } 

OK, aquí está el problema. durante el tiempo de inicio, el diálogo no tendrá idea de quién (elemento) lo activará, y también el ítem id (!). ¿Cómo puedo configurar el comportamiento de esos botones de confirmación para que, si el usuario todavía elige SÍ, siga el enlace para eliminarlo?

Solo tuve que resolver el mismo problema. La clave para hacer que esto funcione es que el dialog debe inicializarse parcialmente en el controlador de eventos click para el enlace con el que desea usar la funcionalidad de confirmación (si desea usar esto para más de un enlace). Esto se debe a que la URL de destino del enlace se debe inyectar en el controlador de eventos para que haga clic en el botón de confirmación. Usé una clase CSS para indicar qué enlaces deberían tener el comportamiento de confirmación.

Aquí está mi solución, abstraída para ser adecuada para un ejemplo.

 
Are you sure about this?
Click here Or, you could click here

Creo que esto funcionaría para usted, si puede generar sus enlaces con la clase CSS ( confirmLink , en mi ejemplo).

Aquí hay un jsfiddle con el código en él.

En aras de una divulgación completa, señalaré que dediqué unos minutos a este problema en particular y proporcioné una respuesta similar a esta pregunta , que tampoco contó con una respuesta aceptada en ese momento.

Encontré que la respuesta de Paul no funcionaba del todo, ya que la forma en que estaba configurando las opciones DESPUÉS de que el diálogo se instanciara en el evento click era incorrecta. Aquí está mi código que estaba funcionando. No lo he hecho a la medida para que coincida con el ejemplo de Paul, pero es la diferencia de un bigote de gato en cuanto a que algunos elementos tienen un nombre diferente. Deberías poder resolverlo. La corrección está en el setter de la opción de diálogo para los botones en el evento click.

 $(document).ready(function() { $("#dialog").dialog({ modal: true, bgiframe: true, width: 500, height: 200, autoOpen: false }); $(".lb").click(function(e) { e.preventDefault(); var theHREF = $(this).attr("href"); $("#dialog").dialog('option', 'buttons', { "Confirm" : function() { window.location.href = theHREF; }, "Cancel" : function() { $(this).dialog("close"); } }); $("#dialog").dialog("open"); }); }); 

Espero que esto ayude a otra persona, ya que esta publicación originalmente me llevó por el camino correcto. Pensé que sería mejor publicar la corrección.

Creé una función propia para un diálogo de confirmación jquery ui. Aquí está el código

 function myConfirm(dialogText, okFunc, cancelFunc, dialogTitle) { $('
' + dialogText + '
').dialog({ draggable: false, modal: true, resizable: false, width: 'auto', title: dialogTitle || 'Confirm', minHeight: 75, buttons: { OK: function () { if (typeof (okFunc) == 'function') { setTimeout(okFunc, 50); } $(this).dialog('destroy'); }, Cancel: function () { if (typeof (cancelFunc) == 'function') { setTimeout(cancelFunc, 50); } $(this).dialog('destroy'); } } }); }

Ahora para usar esto en tu código, simplemente escribe lo siguiente

 myConfirm('Do you want to delete this record ?', function () { alert('You clicked OK'); }, function () { alert('You clicked Cancel'); }, 'Confirm Delete' ); 

Seguir.

Solución simple y corta que acabo de probar y funciona

  $('.confirm').click(function() { $(this).removeClass('confirm'); $(this).text("Sure?"); $(this).unbind(); return false; }); 

¡simplemente agrega la clase = “confirmar” a tu enlace y funciona!

Esta es mi solución. Espero que ayude a cualquiera. Está escrito sobre la marcha en lugar de copiarse, así que discúlpeme por cualquier error.

 $("#btn").on("click", function(ev){ ev.preventDefault(); dialog.dialog("open"); dialog.find(".btnConfirm").on("click", function(){ // trigger click under different namespace so // click handler will not be triggered but native // functionality is preserved $("#btn").trigger("click.confirmed"); } dialog.find(".btnCancel").on("click", function(){ dialog.dialog("close"); } }); 

Personalmente prefiero esta solución 🙂

editar: Lo siento … realmente debería haberlo explicado más en detalle. Me gusta porque, en mi opinión, es una solución elegante. Cuando el usuario hace clic en el botón que debe confirmarse primero, el evento se cancela como debe ser. Cuando se hace clic en el botón de confirmación, la solución no es simular un clic de enlace sino activar el mismo evento de jquery nativo (clic) sobre el botón original que se habría activado si no hubiera un diálogo de confirmación. La única diferencia es un espacio de nombres de evento diferente (en este caso ‘confirmado’) para que el cuadro de diálogo de confirmación no se vuelva a mostrar. El mecanismo nativo de Jquery puede tomar el control y las cosas pueden funcionar como se espera. Otra ventaja es que se puede utilizar para botones e hipervínculos. Espero haber sido lo suficientemente claro.

Sé que esta es una vieja pregunta, pero esta es mi solución utilizando atributos de datos HTML5 en MVC4:

 
Are you sure about this?

Código JS:

 $("#dialog").dialog({ modal: true, autoOpen: false, buttons: { "Confirm": function () { window.location.href = $(this).data('url'); }, "Cancel": function () { $(this).dialog("close"); } } }); $("#TheIdOfMyButton").click(function (e) { e.preventDefault(); $("#dialog").dialog("open"); }); 

¿Con esto bastará?

 $("ul li a").click(function(e) { e.preventDefault(); $('#confirmDialog').show(); var delete_path = $(this).attr('href'); $('#confirmDialog a.ok').unbind('click'); // just in case the cancel link // is not the only way you can // close your dialog $('#confirmDialog a.ok').click(function(e) { e.preventDefault(); window.location.href = delete_path; }); }); $('#confirmDialog a.cancel').click(function(e) { e.preventDefault(); $('#confirmDialog').hide(); $('#confirmDialog a.ok').unbind('click'); }); 

Como anteriormente. Las publicaciones anteriores me pusieron en el camino correcto. Así es como lo hice. La idea es tener una imagen al lado de cada fila en la tabla (generada por script PHP desde la base de datos). Cuando se hace clic en una imagen, se redirige al usuario a la URL, y como resultado, el registro apropiado se eliminará de la base de datos mientras se muestran algunos datos relacionados con el registro clicado en el diálogo de la interfaz de usuario de jQuery.

El código de JavaScript:

 $(document).ready(function () { $("#confirmDelete").dialog({ modal: true, bgiframe: true, autoOpen: false }); }); function confirmDelete(username, id) { var delUrl = "/users/delete/" + id; $('#confirmDelete').html("Are you sure you want to delete user: '" + username + "'"); $('#confirmDelete').dialog('option', 'buttons', { "No": function () { $(this).dialog("close"); }, "Yes": function () { window.location.href = delUrl; } }); $('#confirmDelete').dialog('open'); } 

Diálogo div:

 

Enlace de imágen:

 Delete User 

De esta manera puede pasar los valores de bucle de PHP en el cuadro de diálogo. El único inconveniente es utilizar el método GET para realizar la acción.

Qué tal esto:

 $("ul li a").click(function() { el = $(this); $("#confirmDialog").dialog({ autoOpen: false, resizable:false, draggable:true, modal: true, buttons: { "Ok": function() { el.parent().remove(); $(this).dialog("close"); } } }); $("#confirmDialog").dialog("open"); return false; }); 

Lo he probado en este html:

  

Elimina todo el elemento li, puede adaptarlo según sus necesidades.

(A partir del 22/03/2016, la descarga en la página vinculada no funciona. Dejo el enlace aquí en caso de que el desarrollador lo solucione en algún momento, ya que es un pequeño plugin genial. La publicación original es la siguiente. alternativa, y un enlace que realmente funciona: jquery.confirm )

Puede ser demasiado simple para sus necesidades, pero podría probar este complemento jQuery confirm . Es realmente fácil de usar y hace el trabajo en muchos casos.

Por mucho que odie usar eval, me pareció la manera más fácil para mí, sin causar muchos problemas dependiendo de las diferentes circunstancias. Similar a la función javascript settimeout.

 Confirm   

Me encontré con esto y terminé con una solución, que es similar a varias respuestas aquí, pero implementada de manera ligeramente diferente. No me gustaron muchas piezas de javascript, o un div marcador de posición en alguna parte. Quería una solución generalizada, que luego pudiera usarse en HTML sin agregar javascript para cada uso. Aquí es lo que se me ocurrió (esto requiere jquery ui):

Javascript:

 $(function() { $("a.confirm").button().click(function(e) { e.preventDefault(); var target = $(this).attr("href"); var content = $(this).attr("title"); var title = $(this).attr("alt"); $('
' + content + '
'). dialog({ draggable: false, modal: true, resizable: false, width: 'auto', title: title, buttons: { "Confirm": function() { window.location.href = target; }, "Cancel": function() { $(this).dialog("close"); } } }); }); });

Y luego en HTML, no se necesitan llamadas ni referencias de JavaScript:

 Test 

Como el atributo title se usa para el contenido div, el usuario puede incluso obtener la pregunta de confirmación pasando el mouse por encima del botón (por lo que no usé el atributo title para el mosaico). El título de la ventana de confirmación es el contenido de la etiqueta alt. El snip de JavaScript se puede incluir en una .js generalizada, y simplemente aplicando una clase tienes una bonita ventana de confirmación.

 $("ul li a").live('click', function (e) { e.preventDefault(); $('
').appendTo('body') .html('
Are you sure about this?
') .dialog({ modal: true, title: 'Delete message', zIndex: 10000, autoOpen: true, width: 'auto', modal: true, resizable: false, buttons: { Confirm: function () { // $(obj).removeAttr('onclick'); // $(obj).parents('.Parent').remove(); $(this).dialog("close"); window.location.reload(); }, No: function () { $(this).dialog("close"); } }, Cancel: function (event, ui) { $(this).remove(); } }); return false; });

NOTA: No hay suficientes representantes para comentar, pero la respuesta de BineG funciona perfectamente al resolver problemas de devolución de datos con páginas ASPX, tal como destacan Homer y echo. En honor, aquí hay una variación usando un diálogo dynamic.

 $('#submit-button').bind('click', function(ev) { var $btn = $(this); ev.preventDefault(); $("
").html("Are you sure?").dialog({ modal: true, title: "Confirmation", buttons: [{ text: "Ok", click: function() { $btn.trigger("click.confirmed"); $(this).dialog("close"); } }, { text: "Cancel", click: function() { $(this).dialog("close"); } }] }).show(); });

Otra variación de lo anterior donde verifica si el control es un ‘asp: linkbutton’ o ‘asp: button’ que se representa como dos controles html diferentes. Parece funcionar bien para mí, pero no lo he probado extensivamente.

  $(document).on("click", ".confirm", function (e) { e.preventDefault(); var btn = $(this); $("#dialog").dialog('option', 'buttons', { "Confirm": function () { if (btn.is("input")) { var name = btn.attr("name"); __doPostBack(name, '') } else { var href = btn.attr("href"); window.location.href = href; } $(this).dialog("close"); }, "Cancel": function () { $(this).dialog("close"); } }); $("#dialog").dialog("open"); }); 

Estaba buscando esto para usar en los botones de enlace dentro de una Vista de Grid ASP.NET (Comandos de comstackción GridView Control) Por lo tanto, la acción “Confirmar” en el diálogo necesita activar un script generado por el control Gridview en tiempo de ejecución. esto funcionó para mí:

  $(".DeleteBtnClass").click(function (e) { e.preventDefault(); var inlineFunction = $(this).attr("href") + ";"; $("#dialog").dialog({ buttons: { "Yes": function () { eval(inlineFunction); // eval() can be harmful! }, "No": function () { $(this).dialog("close"); } } }); }); 

Sé que esta pregunta es antigua, pero esta fue la primera vez que tuve que usar un cuadro de diálogo de confirmación. Creo que esta es la forma más corta de hacerlo.

 $(element).onClick(function(){ // This can be a function or whatever, this is just a trigger var conBox = confirm("Are you sure ?"); if(conBox){ // Do what you have to do } else return; }); 

Espero que te guste 🙂

Personalmente veo esto como un requisito recurrente en muchas vistas de muchas aplicaciones ASP.Net MVC.

Es por eso que definí una clase de modelo y una vista parcial:

 using Resources; namespace YourNamespace.Models { public class SyConfirmationDialogModel { public SyConfirmationDialogModel() { this.DialogId = "dlgconfirm"; this.DialogTitle = Global.LblTitleConfirm; this.UrlAttribute = "href"; this.ButtonConfirmText = Global.LblButtonConfirm; this.ButtonCancelText = Global.LblButtonCancel; } public string DialogId { get; set; } public string DialogTitle { get; set; } public string DialogMessage { get; set; } public string JQueryClickSelector { get; set; } public string UrlAttribute { get; set; } public string ButtonConfirmText { get; set; } public string ButtonCancelText { get; set; } } } 

Y mi vista parcial:

 @using YourNamespace.Models; @model SyConfirmationDialogModel 
@Model.DialogMessage

Y luego, cada vez que lo necesita en una vista, simplemente usa @ Html.Partial (lo hizo en los scripts de sección para que JQuery esté definido):

 @Html.Partial("_ConfirmationDialog", new SyConfirmationDialogModel() { DialogMessage = Global.LblConfirmDelete, JQueryClickSelector ="a[class=SyLinkDelete]"}) 

El truco consiste en especificar el JQueryClickSelector que coincidirá con los elementos que necesitan un diálogo de confirmación. En mi caso, todos los anclajes con la clase SyLinkDelete pero podría ser un identificador, una clase diferente, etc. Para mí fue una lista de:

  Delete  

Un tema muy popular y Google encuentra esto para la consulta “cerrar el cuadro de diálogo de jquery en el que se hizo clic en el evento”. Mi solución maneja SÍ, NO, ESC_KEY, X eventos correctamente. Quiero que se llame a mi función de callback sin importar cómo se eliminó el diálogo.

 function dialog_YES_NO(sTitle, txt, fn) { $("#dialog-main").dialog({ title: sTitle, resizable: true, //height:140, modal: true, open: function() { $(this).data("retval", false); $(this).text(txt); }, close: function(evt) { var arg1 = $(this).data("retval")==true; setTimeout(function() { fn(arg1); }, 30); }, buttons: { "Yes": function() { $(this).data("retval", true); $(this).dialog("close"); }, "No": function() { $(this).data("retval", false); $(this).dialog("close"); } } }); } - - - - dialog_YES_NO("Confirm Delete", "Delete xyz item?", function(status) { alert("Dialog retval is " + status); }); 

Es fácil redirigir el navegador a una nueva url o realizar alguna otra acción en la función retval.

Tantas buenas respuestas aquí;) Aquí está mi enfoque. Similar al uso de eval ().

 function functionExecutor(functionName, args){ functionName.apply(this, args); } function showConfirmationDialog(html, functionYes, fYesArgs){ $('#dialog').html(html); $('#dialog').dialog({ buttons : [ { text:'YES', click: function(){ functionExecutor(functionYes, fYesArgs); $(this).dialog("close"); }, class:'green' }, { text:'CANCEL', click: function() { $(this).dialog("close"); }, class:'red' } ] }); } 

Y el uso se ve así:

 function myTestYesFunction(arg1, arg2){ alert("You clicked YES:"+arg1+arg2); } function toDoOrNotToDo(){ showConfirmationDialog("Dialog text", myTestYesFunction, ['My arg 1','My arg 2']); } 

De fábrica, JQuery UI ofrece esta solución:

 $( function() { $( "#dialog-confirm" ).dialog({ resizable: false, height: "auto", width: 400, modal: true, buttons: { "Delete all items": function() { $( this ).dialog( "close" ); }, Cancel: function() { $( this ).dialog( "close" ); } } }); } ); 

HTML

 

These items will be permanently deleted and cannot be recovered. Are you sure?

Puede personalizar aún más esto al proporcionar un nombre para la función JQuery y pasar el texto / título que desea mostrar como parámetro.

Referencia: https://jqueryui.com/dialog/#modal-confirmation

Bueno, esta es la respuesta a tus preguntas …

 < !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  Santa Luisa                 

CONFERMA L`AZIONE:
POSSO CANCELLARE
QUESTA RIGA ?

-->

Modifica/Dettagli: 298 dsadas sadsadas  
1
DATACODICENOME/NOMITESTO  
12/22/2010 298 daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaModificaCancella
22/10/2010 298 dfdsfsdfsfModificaCancella
1

asegúrese de tener jquery 1.4.4 y jquery.ui

Manera fácil con un toque de javascript

 $("#myButton").click(function(event) { var cont = confirm('Continue?'); if(cont) { // do stuff here if OK was clicked return true; } // If cancel was clicked button execution will be halted. event.preventDefault(); }