2011-01-12 9 views
20

Basado en una variable SomeCondition, necesito interceptar un evento de clic en un botón, y pedir confirmación, si dicen que está bien, proceder; de lo contrario, ignorar.Interceptar el evento de clic en un botón, solicitar confirmación, luego proceder

Así que algo como:

if(SomeCondition) { 

// disable click on button 

var isOk = window.confirm("Are you sure?"); 

if(isOk) { 
     $("#button1").click(); 
} 

} 

Nota: el botón 1 ya ha sido conectado con un evento de clic a través de JavaScript desde un archivo .js externo que no puedo cambiar.

No sé lo que el evento Click se une también, así que tengo que desactivar el clic si somecondition es cierto, entonces pedir la confirmación, y luego continuar con el clic.

Respuesta

38

Proceso Isok su window.confirm dentro de la función del botón

$('#button1').click(function(){ 
    if(window.confirm("Are you sure?")) 
    alert('Your action here'); 
}); 

El tema que vamos a tener es el clic ya ha ocurrido cuando se dispara el "¿Está seguro" Llamar a preventDefault doesn' Para detener la ejecución del clic original si es el que lanzó su ventana original. Confirmar.

Un problema de pollo/huevo.

Editar: después de leer su pregunta Editado:

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

Esto era lo que estaba escribiendo. +1 – Stephen

+0

¿a qué se refiere [0]? – Blankman

+0

@Blankman siento mal hábito (si hay más de un elemento coincidente entonces se puede obtener la primera por una simple referencia al primer elemento de la matriz objeto jQuery) –

2

Con jQuery para evitar un impago que acaba de return false:

$("#button1").click(function() { 
    //do your thing 
    return false; 
}); 
+3

Eh ... en realidad no. Esto evitará que burbujee. – Stephen

+0

@ Stephen http://api.jquery.com/submit/ "podemos cancelar la acción de envío llamando a .preventDefault() en el objeto de evento o al devolver falso desde nuestro controlador" – Skilldrick

+0

@Stephen 'return false;' en realidad previene Default y stopPropagation – Skilldrick

2

Para cualquier persona que está buscando una solución simple (no en particular a la especial condición mencionado aquí)

Sólo añadir este atributo en el botón:

.... , onclick = "return confirm('are you sure?')" 

Cuando el cuadro de confirmación devuelve un falso, el evento click se cancela. Nota: El controlador onclick mencionado explícitamente en línea anulará cualquier otro enlace.

0

no pude conseguir ninguna de las respuestas anteriores para trabajar con jQuery 1.9.1

aquí es lo que funcionó para un evento establecido previamente click

var elem = $('#button1'); 
var oldClick = $._data(elem[0], 'events').click[0].handler; 
elem.off('click'); 

elem.click(function(){ 
    if(window.confirm("Are You Sure?")){ 
    oldClick(); 
    } else { 
    return false; 
    } 
}); 

muy similar a la respuesta de Jason Benson anterior

Cuestiones relacionadas