Javascript prompt() – buton de anulare pentru a încheia funcția (Programare, Javascript, Prompt)

Justin Ward a intrebat.

Chem o funcție Javascript window.prompt() și solicit utilizatorului să trimită o variabilă pe care o compar cu o altă variabilă (o protecție foarte elementară a parolei). Funcția funcționează foarte bine, însă, dacă se face click pe "cancel" pe butonul prompt() funcția nu se termină pur și simplu, ci mai degrabă compară variabila cu un șir de caractere gol (pe care utilizatorul a ales să nu-l trimită, apăsând în schimb „cancel”), ceea ce face ca funcția să continue la else{ } porțiune.

Întrebarea mea este: cum pot încheia funcția la apăsarea „cancel”? Trebuie doar să știu cum să țintesc butonul de anulare.

În mod normal, aș apela pur și simplu un .stop() pe butonul click() unui buton, dar nu știu cum să țintesc butonul de anulare al ferestrei de solicitare.

Comentarii

  • Folosiți event.target…vă va oferi o referință la elementul țintă. –  > Por Apurv.
  • prompt returnează null atunci când este apăsat butonul de anulare. –  > Por zzzzBov.
5 răspunsuri
zzzzBov

prompt returnează un șir de caractere dacă utilizatorul apasă pe OK ('' fiind fără a fi trimisă nicio valoare). În cazul în care utilizatorul a apăsat Cancel, , null este returnat. Tot ce trebuie să faceți este să verificați dacă valoarea este 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;
    }
}

Comentarii

  • Minunat! Mulțumesc mult pentru ajutor! Explicația ta a făcut să pară atât de evident încât a fost ca o palmă peste față! Haha. Mulțumesc din nou. 🙂 –  > Por Justin Ward.
  • Dacă acesta a răspuns la întrebarea dvs., asigurați-vă că ați selectat marcajul de lângă ea pentru a o marca ca răspuns. –  > Por zzzzBov.
  • Ok – sunt un novice pe acest site, așa că nu știam. –  > Por Justin Ward.
  • @JustinWard, Atunci îți recomand să revezi faq-ul, dacă nu ai făcut-o deja. Ajutorul de editare este, de asemenea, util. –  > Por zzzzBov.
Wayne

Ar trebui să verificați în mod explicit pentru null ca valoare de retur (folosind triple-equals) și return atunci când acesta este rezultatul.

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

Acest lucru vă permite să faceți distincția față de șirul gol, care este ceea ce este returnat atunci când utilizatorul face clic pe OK dar nu introduce niciun conținut.

Comentarii

  • Minunat! Mulțumesc mult pentru ajutor! Exact ceea ce căutam. Destul de al naibii de simplu, într-adevăr. Am uitat complet de returnările de „null”. –  > Por Justin Ward.
David Crowe

O problemă substanțială în ceea ce privește gestionarea rezultatului „prompt” este că Safari (cel puțin versiunea 9.1.2) returnează „” în loc de null atunci când se face clic pe „Anulare”. Acest lucru înseamnă că: if(result==null) return; nu funcționează și nu se poate face distincția între introducerea unui șir de caractere nul și anularea.

Posix Ninja

Încercați:

message = prompt("Enter text");
if(message == "null" || message == null || message == "" );

Acest lucru a funcționat pentru mine.

Comentarii

  • Ce se întâmplă dacă utilizatorul chiar a vrut să furnizeze șirul „null”? –  > Por jdgregson.
Michael Shaffer

Poți să verifici doar pentru

if (prompt_responce == null)

pentru a afla dacă este închisă.