Basado en una variable SomeCondition , necesito interceptar un evento de clic en un botón y pedir confirmación, si dice que está bien, continúe; de lo contrario, ignore el clic.
Entonces algo como:
if(SomeCondition) { // disable click on button var isOk = window.confirm("Are you sure?"); if(isOk) { $("#button1").click(); } }Nota: button1 ya se conectó con un evento de clic a través de javascript desde un archivo .js externo que no puedo cambiar.
No sé a qué se vinculó el evento de clic, así que tengo que deshabilitar el clic si SomeCondition es verdadero, luego solicito confirmación y luego continúo con el clic.
Procese isOK your window.confirm dentro de la función del botón
$('#button1').click(function(){ if(window.confirm("Are you sure?")) alert('Your action here'); });El problema que vas a tener es que el clic ya se ha producido cuando activas tu pregunta "¿Estás seguro?" Llamar a preventDefault no detiene la ejecución del clic original si es el que abrió tu ventana original.
Un pequeño problema con el huevo y la gallina.
Editar: después de leer su pregunta editada:
var myClick = null; //get a list of jQuery handlers bound to the click event var jQueryHandlers = $('#button1').data('events').click; //grab the first jquery function bound to this event $.each(jQueryHandlers,function(i,f) { myClick = f.handler; return false; }); //unbind the original $('#button1').unbind('click'); //bind the modified one $('#button1').click(function(){ if(window.confirm("Are You Sure?")){ myClick(); } else { return false; } });Con jQuery para evitar el valor predeterminado, simplemente return false :
$("#button1").click(function () { //do your thing return false; });Para cualquiera que esté buscando una solución simple (no particular a la condición especial mencionada aquí)
Simplemente agregue este atributo al botón:
.... , onclick = "return confirm('are you sure?')"Cuando el cuadro de confirmación devuelve un falso, el evento de clic se cancela. Nota: El controlador onclick mencionado explícitamente en línea anulará cualquier otro enlace.