2013-12-12 7 views
6

Wie kann ein leerer Wert erkannt werden, wenn der Benutzer die Eingabeaufforderung ok drückt (und das Eingabeaufforderungsfeld zuvor leert)? Ich muss den alten Wert mit dem neuen (leeren) Wert überschreiben. Ich mache das:Erkennen leerer Werte bei Eingabeaufforderung

var oldVal = 'something'; 
var newVal = prompt("Enter new value:", oldVal); 

Derzeit gibt es null wenn Benutzer leert Wert und klickt ok.

Aber zur gleichen Zeit muss ich auf Null-Wert überprüfen, denn wenn der Benutzer auf "Abbrechen" klickt, wird Null zurückgegeben, die ich nicht als neuen Wert möchte.

+3

'prompt' NULL nicht zurück, wenn die Eingabe leer ist und OK gedrückt wird; Es gibt die leere Zeichenfolge zurück. –

Antwort

13

Es gibt null nicht zurück, wenn der Benutzer OK drückt - es wird eine leere Zeichenfolge zurückgeben. Sie testen den Rückgabewert wahrscheinlich nicht richtig. Wenn Sie zwischen den drei verschiedenen Rückkehr Staaten testen möchten, können Sie dies wie folgt tun:

var oldVal = 'something'; 
var newVal = prompt("Enter new value:", oldVal); 
if (newVal === "") { 
    // user pressed OK, but the input field was empty 
} else if (newVal) { 
    // user typed something and hit OK 
} else { 
    // user hit cancel 
} 

Arbeits Demo: http://jsfiddle.net/jfriend00/Kx2EK/


Ihr Kommentar zeigt, dass Sie diesen Code verwenden die testen Ergebnis:

if(!newVal || oldVal == newVal)return false; 

Wenn der Benutzer das Feld löscht und drückt auf OK wird newVal "" (eine leere Zeichenkette) sein. !newVal wird true sein, so dass Sie false zurückgeben werden. Eine leere Zeichenfolge ist ein falscher Wert wie null. Sie brauchen mehr explizit für null wie dies zu überprüfen:

if (newVal === null || newVal === oldVal) { 
    // cancel button was hit 
    // or the same value was entered 
    return false; 
} 

Arbeiten Demo dieser Logik: http://jsfiddle.net/jfriend00/ynwBx/

Anmerkung: Ich === bin mit dem JavaScript-Interpreter, um zu verhindern, jede Art Casting zu tun, wie ich will nur explizit auf null überprüfen.

+0

Aber ich muss dies in meiner Aussage haben: If (! NewVal || oldVal == newVal) zurückgeben false; also muss ich nach Null suchen. Und wenn der Benutzer das Eingabeaufforderungsfeld leert und dann ok drückt, wird null zurückgegeben. – Toniq

+0

@Toniq - Sie scheinen nicht zu verstehen, dass '! NewVal' auch eine leere Zeichenfolge enthält, so dass Sie nicht zwischen der 'Null'-Schaltfläche (Abbrechen) und einer leeren Zeichenfolge (OK-Schaltfläche) unterscheiden. Ich habe meiner Antwort Code hinzugefügt, der Ihnen zeigt, wie Sie das tun können, was Sie gefragt haben. – jfriend00

+0

Danke, es funktioniert jetzt! – Toniq

2

In den meisten Browsern gibt die Eingabeaufforderung null zurück, wenn der Benutzer Abbrechen drückt, aber in einigen (Safari, zB) gibt es eine leere Zeichenfolge zurück. Wenn der Benutzer einen Text eingibt und ok drückt, gibt die Eingabeaufforderung den eingegebenen Text zurück. Wenn der Benutzer ok gedrückt hat, ohne Text eingegeben zu haben, wird die leere Zeichenfolge zurückgegeben.

1

ein bisschen alt, aber es kann sich lohnen, einfach einen Test für die Länge der Zeichenfolge in der gleichen if (statement) beide

if(newVal !=null & newVal.length>0){ 

prüfen Abbrechen und ein leerer Eintrag.

+0

Haben Sie das getestet? Es sollte '&&', nicht binary '&' (obwohl ich bin mir nicht sicher, ob '&' wird auch hier funktionieren) – YakovL

0
<html> 
<body>  
<p>Click the button to demonstrate the prompt box.</p>  
<button onclick="myFunction()">Try it</button>  
<p id="demo"></p>  
<script> 
function myFunction() { 
    var answer=prompt('Reason for deletion?'); 
    var n = answer.length; 
    if(n > 5) 
    { 
    document.getElementById("demo").innerHTML = 
    "Hello " + answer + "! How are you today?"; 
    } 
    else if(n == 0) 
    { 
    myFunction() 
    } 
} 
</script>  
</body> 
</html> 
+0

Bitte erläutern Sie auch – bc004346

+0

Sie können Null-Wert in der Eingabeaufforderung überprüfen ... wenn die Prompt-Box gibt eine Null zurück, dann kehrt es zur selben Funktion zurück ... – sebastian

0

Einfach zu sehen, ob beide stornieren oder ok mit leeren String

function valueIsSet(value) 
{ 
    return (value && value !== "") 
} 

// example: 

var name; 
while (!valueIsSet(name) { 
    name = prompt("Please enter your name"); 
} 

alert("Welcome " + name);