2015-04-09 12 views
5
geçerli bir tarih tek tip kullanıcı için ne istiyorum

, ancak sorun bunu başarmak için iyi bir yol bulmaya yaşıyorum.angularjs geçersiz tarih girişini önlemek için yönergesine

tarih biçimi "AA/GG/YYYY" olması gerekiyor, bu yüzden "99/99/9999" olarak girişe bir maske var. Bu, kullanıcının sadece rakam yazmasını ve ihtiyaç duyduğum şekilde otomatik olarak biçimlendirmesini zorlamasına rağmen, sorun bu kullanıcının geçersiz bir tarih olan "53/49/6540" gibi bir şey yazmasına izin verir.

tuşa basma/keydown olay için bir işlev Bağlanma girişimi 1

.

  • Yazdıkları tarihi doğrulayabilen bir ifadem var (bu nedenle ay için "12" olmasına karşın "13" olmasına izin vermiyor).
  • Tüm iyi görünüyor .. ama ...
    • giriş "1999/10/21"
    • Onlar "12" için ayı değiştirmek istediğiniz
    • olduğunu varsayalım düzenlerken bazı garip sonuçlarını gösteren başlar.
    • yüzden "0" dan sonra, imlecini koymak ve backspace vurmak,
    • Değeri "
    • Ya da basitçe "0" vurgulamak "12/11/999" ve geçersiz önleme girdi şimdi ve yanlışlıkla vurmak 3" için bir işlev Bağlanma daha fazla giriş

Denemesi 2

önlenmesi, daha sonra geçersiz "13/21/1999 " bu haline geçer" 2 yerine" anahtar up/değiştir etkinliği.

  • Ben, eski değer, yeni bir değer almak ve doğrulamak ve onu
  • onlar çıkarıldı olsun ve geriye Yazılan ne izlemeli gibi bu garip kullanıcı deneyimi oluşturur geçersiz ise eski geri dönmek Ben geçersiz eğer bunu döner beri, kullanıcı backspace müsaade etmiyor hepsi
  • de sevmiyorum hangi
  • eğer yeterince hızlı daktilo aracılığıyla Yine geçersiz veri sağlayan

Yardım

onlar garip şeyler olur kalmadan (ziyade aslında sonra yerine) yazarken tarihini doğrulamak için hiç bir yolu var mı?

Plunkr gösteren konular:http://embed.plnkr.co/0qbiiiRnIo9SuJ5xNe30/preview

+0

Bunun yerine bir tarih seçicisi kullanın. Tarihleri ​​doğrulamak en iyisidir. Ayrıca, 30 Şubat veya 31 Nisan gibi senaryoyu da düşünün. Tarih seçiciyi kullanmak en iyisidir. Kullanıcının tarihi manuel olarak girmesini önleyin. Odakta, tarih seçiciyi göster – mohamedrias

+0

Özür dilerim, tarih seçiciyi de kullanmamdan bahsetmedim (sadece plunkr'a koymadım), ancak yazmayı başaramamak istemiyorum tarihte de, meselem ortaya çıkıyor. – Trehyu

cevap

1

Bununla daha çok uğraştıktan sonra, memnun olduğum bir çözüm bulabildim.

Plunkr: vaka kimse merak ediyordum ben paylaşmak düşündüm Temeldehttp://embed.plnkr.co/gE1WXaXsYI7zpWPkmvVS/preview

, ben "SelectionStart" ve dizinini kapmak sağlayan bir elemanın "selectionEnd" özelliklerine tökezledi yeni değer bir tuşa basılacak. Böylece eski değeri alıp, doğru konuma yazılan karakteri ekleyerek, doğrulayarak ve geçersiz kılmayı önlemek için "yeni değer" elde edebildim.

Farklı bir şekilde yaptığım başka bir şey, maskelemenin eklediği tüm kesik çizgileri ve boşlukları çıkarır (_ _/_ _/_ _ _ _) ve normal ifadelerimi yalnızca sayılara göre doğrulamak üzere değiştirdim (örneğin "12121900") kullanıcının, herhangi bir noktada tuhaf "123/19/90" çeşit çeşitleme yapmadan herhangi bir noktada karakterleri geri almasına/eklemesine izin verir.

Tamamen mükemmel değil, ama en azından daha iyi.

+0

Kötü değil ama geçersiz olan 11/31/2016'e izin verdim. – CYoung

0

Size ilk yaklaşım biraz değiştirebilir. Anahtarlama/indirme olayını bağladığınızı ve sonra girişi doğruladığınızı söylediniz, bu nedenle geri dönüşün kilit olayını (anahtar kodu 8) engellemeyin, yani kullanıcı geri silme tuşuna bastığında girişi doğrulamayın.

Şimdi de kullanıcı girişi değiştirmez eğer, o zaman giriş doğrulamak ve tarihi hakkında kullanıcıyı söyleyebilirim yaklaşık 3 saniyelik bir zaman aşımı ekleyebilirsiniz.

+0

Backspace problemini çözüme kavuşturmasına neden oluyor ve # 2 girişimi için geri dönüyoruz, bu yüzden öneriniz için teşekkür ederim, ancak maalesef diğer tüm sorunlar devam ediyor. – Trehyu

İlgili konular