2012-10-12 202 views
23

Llamo a un Javascript window.prompt() y solicito al usuario que envíe una variable que comparo con otra variable (una protección de contraseña muy básica). La función funciona muy bien, sin embargo, si hace clic en "cancel" en la ventana prompt(), la función no termina simplemente, sino que compara la variable con una cadena vacía (que el usuario optó por no enviar presionando "cancelar") lo que resulta en la función continúa en la parte else{ }.Aviso de Javascript() - botón cancelar para finalizar la función

Mi pregunta es, ¿cómo termino la función al presionar cancelar? Solo necesito saber cómo enfocar el botón cancelar.

Normalmente me gustaría simplemente llamar a .stop() en el click() de un botón, pero no sé cómo apuntar al botón cancelar de la ventana de solicitud.

+0

use event.target..it le dará la referencia del elemento de destino. – Apurv

+0

'prompt' devuelve' null' cuando se presiona el botón cancelar. – zzzzBov

Respuesta

53

prompt devuelve una cadena si el usuario presiona OK ('' siendo sin ningún valor enviado). Si el usuario presiona Cancel, se devuelve null. Todo lo que necesita hacer es comprobar si el valor es null:

function doSomething() { 
    var input; 
    input = prompt('Do something?'); 
    if (input === null) { 
     return; //break out of the function early 
    } 
    switch (input) { 
    case 'fun': 
     doFun(); 
     break; 
    case 'boring': 
     beBoring(); 
     break; 
    } 
} 
+0

¡Impresionante! Muchas gracias por tu ayuda! ¡Tu explicación lo hizo parecer tan obvio que fue como una bofetada en la cara! Jaja. Gracias de nuevo. :) –

+0

Si esto responde su pregunta, asegúrese de seleccionar la marca de verificación al lado para marcarla como respuesta. – zzzzBov

+0

Ok, soy un noobie en este sitio, así que no sabía. –

2

Debe comprobar explícitamente null como valor de retorno (mediante Triple-iguales) y return cuando este es el resultado.

var result = prompt("OK?"); 
if (result === null) { 
    return; 
} 

Esto le permite distinguir entre la cadena vacía, que es lo que se devuelve cuando el usuario hace clic OK sino que entra ningún contenido.

+0

¡Impresionante! Muchas gracias por tu ayuda! Exactamente lo que estaba buscando. Muy malditamente simple, de verdad. Me olvidé completamente de las devoluciones de 'null'. –

1

¿Puede usted acaba de comprobar si hay

if (prompt_responce == null) 

de decir si está cerrado.

+0

¡Muchas gracias! –

1

Un problema importante con el manejo del resultado de 'aviso' es que Safari (al menos la versión 9.1.2) devuelve "" en lugar de nulo cuando se hace clic en "Cancelar". Esto significa que: if (result == null) return; no funciona, y no puede distinguir entre la entrada de una cadena nula y la cancelación.

Cuestiones relacionadas