- Konu sahibi
- #1
JavaScript prompt nedir?
JavaScript'teki
prompt(), kullanıcıdan kısa bir metin almak için tarayıcıda yerleşik bir iletişim kutusu açan fonksiyondur. Kullanıcı bir değer girip onaylarsa girilen metni, İptal'e basarsa null değerini döndürür. Normal gösterimde çağrının bulunduğu JavaScript akışı yanıtı beklediği için küçük ve basit etkileşimlerde kullanılmalı; modern arayüzlerde çoğu zaman HTML formu tercih edilmelidir.Temel kullanım ve dönen değer
En küçük çalışan örnek aşağıdaki gibidir:
Kod:
<button id="start" style="border-radius:4px">Adını sor</button>
<script>
document.querySelector('#start').addEventListener('click', () => {
const answer = window.prompt('Adınız nedir?', '');
if (answer === null) {
document.querySelector('#start').textContent = 'İşlem iptal edildi';
return;
}
const name = answer.trim();
document.querySelector('#start').textContent =
name === '' ? 'İsim girilmedi' : `Merhaba, ${name}!`;
});
</script>
Kodu bir HTML dosyasına koyup tarayıcıda açın ve düğmeye basın. Bir metin girip Tamam'a bastığınızda düğme üzerinde selamlama görünür; İptal'e basıldığında işlem iptal mesajı görünür. Boş metin girildiğinde sonuç
'' olur; bu, null ile aynı değildir. Bu ayrımı kontrol etmezseniz iptal ile boş yanıtı yanlışlıkla aynı işlem olarak değerlendirebilirsiniz.Sözdizimi
prompt(mesaj, varsayilanDeger) biçiminde kullanılır. İlk parametre kullanıcıya gösterilecek mesajdır. İkinci parametre isteğe bağlıdır ve giriş alanının başlangıç değerini belirler. Her iki değer de metin olarak ele alınır.Sonucu kullanırken dönüşüm yapın
prompt() sayısal görünen bir girişte bile metin döndürür. Sayı bekliyorsanız önce boş ve geçersiz girdileri ele alıp sonra dönüştürün:
Kod:
const raw = window.prompt('Bir sayı girin:', '');
if (raw === null) {
console.log('Kullanıcı işlemi iptal etti.');
} else if (raw.trim() === '') {
console.log('Boş değer kabul edilmedi.');
} else {
const number = Number(raw);
if (Number.isFinite(number)) {
console.log(number * 2);
} else {
console.log('Geçerli bir sayı girilmedi.');
}
}
Bu örnek Number’ın kabul ettiği JavaScript sayı biçimlerini kullanır; Türkçe ondalık virgülünü otomatik yerelleştirmez. Örneğin 1,5 girişi bu kuralla geçerli sayı sayılmaz. Bir adet bekliyorsanız ayrıca tam sayı, alt ve üst sınır denetimi ekleyin; sonlu olmak tek başına iş kuralına uygunluk değildir.
parseInt() veya parseFloat() bazı kısmi metinleri kabul edebileceğinden, yalnızca tamamı sayısal bir değer kabul edilecekse Number() ve Number.isFinite() birlikte daha anlaşılır bir kontroldür.Ne zaman kullanılmalı?
prompt() hızlı prototiplerde, örnek kodlarda, geliştirici araçlarında veya kullanıcıdan tek bir kısa değer alınan basit akışlarda işe yarar. Ancak iletişim kutusu tarayıcı tarafından yönetildiği için görünümü özelleştirilemez; form alanı, doğrulama mesajı ve erişilebilirlik üzerinde sınırlı kontrol sağlar. Normal modal gösterimde çağrının bulunduğu JavaScript akışı bekler. Bununla birlikte sekme değişmesi veya tarayıcı/sandbox politikası nedeniyle kutu hiç açılmayabilir ya da bekleme uygulanmayabilir; kritik iş akışını yalnız bu davranışa bağlamayın.Karar verirken şu ayrımı kullanabilirsiniz:
| İhtiyaç | Uygun yaklaşım | Neden |
|---|---|---|
| Hızlı, tek metinlik deneme | prompt() | Ek HTML ve olay yönetimi gerektirmez |
| Üretim kullanıcı arayüzü | HTML formu veya özel iletişim kutusu | Görünüm, doğrulama ve erişilebilirlik kontrol edilir |
| Parola veya hassas veri | Uygun bir parola alanı ve sunucu tarafı akışı | Düz metin istemi güvenli ve uygun bir arayüz değildir |
Özellikle ziyaretçiye gösterilen kalıcı bir özellikte
prompt() kullanmak yerine input alanı, açıklama metni ve doğrulama mesajı içeren bir form oluşturun. Kullanıcının girdiği veriyi daha sonra HTML'e aktarırken de doğrudan innerHTML içine yerleştirmeyin; metin göstermek için textContent kullanın.Sık yapılan hatalar
- İptali kontrol etmemek: Dönen değer
nullolabilir. Üzerinde doğrudantrim()çağırmak hataya yol açar. - Metin sonucu sayı sanmak: Aritmetik işlemden önce açıkça dönüştürme ve geçerlilik kontrolü yapın.
- Boş metni geçerli kabul etmek:
trim()ile yalnızca boşluklardan oluşan girdiyi ayrıca değerlendirin. - Uzun akışlarda kullanmak: Kullanıcı yanıt verene kadar ana JavaScript akışı beklediği için çok aşamalı işlemlerde form tabanlı arayüz kullanın.
Sık sorulan sorular
prompt() sunucuda çalışır mı?
Hayır.prompt() tarayıcı ortamına ait bir özelliktir. Node.js gibi sunucu tarafı JavaScript ortamlarında aynı tarayıcı iletişim kutusunu açmaz; bu ortamlarda giriş, uygulamanın kullandığı komut satırı, HTTP isteği veya başka bir arayüz üzerinden alınmalıdır.