write usuario una tecla sirve qué para oprima objetivo mover invoca hace función funciones forma ejemplos ejemplo ejecutar cómo cumple cuando cualquier javascript safari

javascript - usuario - ¿qué hace la función document.write ?



Safari 5.1 prompt() función y cancelar (5)

En la mayoría de los navegadores (incluidas versiones anteriores de Safari), la función de prompt Javascript devuelve null cuando el usuario hace clic en "Cancelar", y la cadena vacía si el usuario hace clic en "Aceptar" sin nada en el cuadro de texto. Pero en Safari 5.1, devuelve la cadena vacía para ambos casos.

Utilicé la función "informar un error" de Safari para informarlo a Apple, pero quién sabe cuándo podrían incluso reconocerlo y mucho menos arreglarlo. ¿Alguien tiene una solución alternativa?


Aprecio la información de arriba, no había notado el comportamiento, pero ahora veo que estás en lo correcto. Safari 5 se comporta normalmente, 5.1 devuelve una cadena vacía para cualquier clic de botón, si hay una cadena vacía en el campo de solicitud.

Mi única sugerencia es poner un personaje espacial en el campo para comenzar. Solo el botón "Aceptar" devolverá el espacio, cancelar devolverá nulo o la cadena vacía.

var p=prompt(''what dya say?'','' ''); if(!p)// cancel was *probably* clicked else if(p==='' '')//ok was clicked with no input else// there is user input

El usuario podría comenzar a ingresar algo, eliminarlo y luego presionar ''aceptar'' en lugar de cancelar, pero ese tipo de caso también puede ser una cancelación.


Claro, dos de hecho.

Primero el más obvio, rediseñe su sistema para que una cadena vacía no sea una respuesta válida. Piénselo, cuando en una conversación es aceptable que un hombre lo mire sin comprender en respuesta a su pregunta.

El segundo es usar cuadros de diálogo modales, como jQuery, para solicitar esta información. Obtendrá el control completo sobre él y la aplicación no se verá como si estuviera hecha en 1996.


He logrado encontrar una solución real, ya que Safari agregó soporte para showModalDialog() en 5.1. Muy conveniente, eso.

Primero, crea un archivo con este contenido:

<html> <head> <title>Prompt</title> <script type="text/javascript"> function a(){ if(window.dialogArguments.length > 0) document.getElementById(''a'').textContent = window.dialogArguments[0]+''/n/n''; if(window.dialogArguments.length > 1) document.getElementById(''b'').value = window.dialogArguments[1]; document.getElementById(''b'').focus(); } function s(b){ window.returnValue=b?document.getElementById(''b'').value:null; window.close(); } function kp(e){ if(!e.DOM_VK_ENTER) e.DOM_VK_ENTER=13; if(!e.DOM_VK_RETURN) e.DOM_VK_RETURN=13; if(!e.DOM_VK_ESCAPE) e.DOM_VK_ESCAPE=27; switch(e.keyCode){ case e.DOM_VK_ENTER: case e.DOM_VK_RETURN: if(e.preventDefault) e.preventDefault(); if(e.stopPropagation) e.stopPropagation(); e.returnValue = false; e.cancelBubble = true; s(1); return false; case e.DOM_VK_ESCAPE: if(e.preventDefault) e.preventDefault(); if(e.stopPropagation) e.stopPropagation(); e.returnValue = false; e.cancelBubble = true; s(0); return false; default: return true; } } </script> <body style="text-align:center;white-space:pre-wrap" onload="a()"> <span id="a"></span> <input type="text" id="b" onkeydown="return kp(event)" /><input type="button" value="Ok" onclick="s(1)" /><input type="button" value="Cancel" onclick="s(0)" /> </body> </html>

Luego, para las versiones rotas de Safari (parece que no hay forma de detectar las características sin mostrar un mensaje y pedirle al usuario que presione "Cancelar", por lo que probablemente deba hacer una comprobación de User-Agent), ejecute el siguiente Javascript para reemplazar window.prompt :

(function(){ if(window.console && window.console.log) window.console.log(''Applying bugfix for Safari 5.1/'s prompt()''); var oldprompt = window.prompt; window.prompt = function() { return showModalDialog(location.protocol+''//''+location.host+''/js/safari-5.1-bugfix.html'', arguments); }; window.prompt.$orig = oldprompt; })();

Por supuesto, cambie la ruta /js/safari-5.1-bugfix.html a la ruta correcta al archivo HTML creado anteriormente en su servidor. Desafortunadamente, no podemos usar un URI de data: ya que Safari aparentemente tiene otro error donde pierde window.dialogArguments e ignora window.returnValue para diálogos con data: URIs.

Luego puede usar prompt() como lo haría normalmente.


var res = prompt(''hello?'', '''') if (res === null || res === '''' && isSafari && confirm(''was that cancel?'')) cancel


Lo intenté y esto funcionó para mí

var location=""; var p=prompt("type your location",location ); if(p!==null) { location = p; alert("ok do query"); }