javascript
  • prompt
  • 2013-12-12 13 views 6 likes 
    6

    Jak wykryć pustą wartość, gdy użytkownik naciśnie przycisk "OK" na monitorze (i poprzednio opróżnia pole zachęty)? Muszę nadpisać starą wartość nową (pustą) wartością. Robię to:Wykryj pustą wartość w wierszu natychmiastowym

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

    Obecnie zwraca null, jeśli użytkownik kliknie i opróżnia wartości ok.

    W tym samym czasie muszę sprawdzić wartość pustą, ponieważ jeśli użytkownik kliknie "anuluj", zwróci wartość null, której nie chcę jako nową wartość.

    +3

    'prompt' nie zwraca NULL, gdy wejście jest pusta i naciśnięciu przycisku OK; zwraca pusty ciąg. –

    Odpowiedz

    13

    To nie zwraca null, jeśli użytkownik trafi OK - zwróci pusty ciąg znaków. Prawdopodobnie nie testujesz poprawnie wartości zwracanej. Jeśli chcesz przetestować pomiędzy trzech różnych stanach w obie strony, można to zrobić tak:

    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 
    } 
    

    demo robocza: http://jsfiddle.net/jfriend00/Kx2EK/


    Twój komentarz sugeruje, że używasz tego kodu, aby przetestować wynik:

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

    Gdy użytkownik ściąga z boiska i naciska przycisk OK, newval będzie "" (pusty ciąg znaków). !newVal będzie true, więc wrócisz false. Pusty ciąg jest wartością falsey, podobnie jak null. Trzeba bardziej jawnie sprawdzić null tak:

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

    demo tej logiki pracy: http://jsfiddle.net/jfriend00/ynwBx/

    Uwaga: używam === aby zapobiec javascript tłumacza od jakiegokolwiek typu odlew jak chcę tylko jawnie sprawdź dla null.

    +0

    Ale muszę mieć to w moim oświadczeniu: if (! NewVal || oldVal == newVal) return false; więc muszę sprawdzić wartość zerową. A jeśli użytkownik opróżni pole podpowiedzi, naciśnie przycisk OK, zostanie zwrócona wartość null. – Toniq

    +0

    @Toniq - wydaje się, że nie rozumiesz, że '! NewVal' będzie również pasować do pustego łańcucha, więc nie rozróżniasz między' null' (przycisk anulowania) i pustym łańcuchem (przycisk ok). Dodałem kod do mojej odpowiedzi, który pokaże ci, jak zrobić to, o co prosiłeś. – jfriend00

    +0

    Dzięki, działa już teraz! – Toniq

    2

    W większości przeglądarek monit zwróci null, jeśli użytkownik naciśnie przycisk Anuluj, ale w niektórych (Safari, np.) Zwraca pusty ciąg. Jeśli użytkownik wprowadzi jakiś tekst i naciśnie przycisk OK, monit zwróci wprowadzony tekst, jeśli użytkownik naciśnie przycisk OK bez wprowadzania tekstu, zwróci pusty ciąg znaków.

    1

    nieco stary, ale może warto po prostu to test na długość napisu w tym samym if() oświadczenie

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

    sprawdzić zarówno na Anuluj i pusty wpis.

    +0

    Testowałeś to? Powinny istnieć '&&', a nie binarne '' i '(chociaż nie jestem pewien, czy' & 'zadziała tutaj także) – 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

    Proszę podać wyjaśnienie również – bc004346

    +0

    Możesz sprawdzić wartość pustą w polu ... jeśli pole prompt zwraca wartość null, a następnie wraca do tej samej funkcji ... – sebastian

    0

    Proste aby sprawdzić, czy oba anulować lub ok z pustym ciągiem

    function valueIsSet(value) 
    { 
        return (value && value !== "") 
    } 
    
    // example: 
    
    var name; 
    while (!valueIsSet(name) { 
        name = prompt("Please enter your name"); 
    } 
    
    alert("Welcome " + name); 
    
    Powiązane problemy