Soru ASP.net MVC 3 jQuery Doğrulama; Göze batmayan OnKeyUp'ı devre dışı bırakılsın mı?


Belirli bir doğrulayıcı (kredi kartı) için jQuery Doğrulaması'nı devre dışı bırakmanın bir yolu var mı, böylece yalnızca onblur'da değil, onkeyup'da gerçekleşir mi?

JQuery Validator belgelerine dayanarak böyle bir şey yapabileceğimi düşündüm:

$(function () {
    $("[data-val-creditcard]").validate({
        onkeyup: false
    })
});

Ancak, çalışıyor gibi görünmüyor.

Ayrıca, validator'umda aşağıdakileri yapmayı denedim:

public class CreditCardValidator : DataAnnotationsModelValidator<CreditCardAttribute>
{
    string _message;

    public CreditCardValidator(ModelMetadata metadata, ControllerContext context, CreditCardAttribute attribute)
        : base(metadata, context, attribute)
    {
        _message = attribute.ErrorMessage;
    }

    public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
    {
        var rule = new ModelClientValidationRule
        {
            ErrorMessage = _message,
            ValidationType = "creditcard"
        };
        rule.ValidationParameters.Add("onkeyup", false);
        return new[] { rule };
    }
}

Ya işe yaramıyor, ama ben sadece ValidationParameters'in uygun kullanımında bir bıçak takıyordum.

Bir formda bir kredi kartı numarası girerek ve geçersizden geçerli olana, sonra da geçersiz olana doğru rastgele değişmek zorunda kalmanın can sıkıcı bir türüdür.

Herhangi bir fikir? Teşekkürler!


25
2017-11-05 19:28


Menşei




Cevaplar:


Tamam arkadaşlar,

Aynı problemdeydim ve şu ipucunu buldum: http://old.nabble.com/-validate--onkeyup-for-single-field-td21729097s27240.html

Bu fikir temel olarak keyup olayının üzerine yazılır ve false döner. Yani özel durumunuzda şunları eklemeniz gerekecek:

$('#my-form').validate({
   rules: {
     [...]
   }
} 
// Disable keyup validation for credit card field
$("[data-val-creditcard]").keyup(function() { return false } );

Ve kredi kartı alanınızın yalnızca bulanıklıkta veya teslim edildiğinde kontrol edildiğini göreceksiniz (ancak geri kalanlar da tuş üzerinde çalışıyor).

Aynı çözümü arıyordum ve burada cevabın iyileştirilebileceğini keşfettim, bu yüzden burada paylaşmanın güzel olacağını düşündüm.


19
2017-12-29 10:36



Yanlış dönen anahtarın devre dışı bırakılmasıyla ilgili harika ipucu. - Sam
Bu, anahtar doğrulamayı kaldırabilen tek yaklaşımdı. Girişi doğrulamak için ajax araması yaptığım için aşırıydı. Sonunda, giriş elemanı için bir onchange olayı ajax sonucu tarafından kontrol edilen giriş elemanı üzerinde bir veri niteliği belirledim. Bu, veritabanı doğrulaması için sunucuya istekte bulunurken, jquery validate'ın basit bir getiri doğru veya yanlış olmasına izin verdi. - Travis J
Bastırılacak birkaç olay vardı, onlar için basit bir yer tutucusu yaptım. var fnfalse = function(){ return false; }ve daha sonra işlevselliği engellemek için kullandı. $(element).keyup(fnfalse).blur(fnfalse).focusout(fnfalse);. - Travis J
2018 ve hala çalışıyor! Çok teşekkürler, günümü kurtardın. - ClownCoder


$.validator.setDefaults validator dahili olarak başlatıldığı için göze batmayan doğrulama için çalışmaz.

Göze batmayan doğrulama kullanan formlardaki ayarları değiştirmek için aşağıdakileri yapabilirsiniz:

var validator = $("form").data("validator");
if (validator) {
    validator.settings.onkeyup = false; // disable validation on keyup
}

20
2017-10-18 11:01



aspnet.uservoice.com/forums/41201-asp-net-mvc/suggestions/... - Blake Niemyjski
Bu, tüm öğeler için anahtar doğrulama doğrulama tetikleyicisini devre dışı bırakır, değil mi? Sadece 1 element için nasıl devre dışı bırakılacağını soruyordu. - TweeZz


Bunun eski bir yazı olduğunu anlıyorum, ancak bu sorunun cevabını hiçbir şekilde yanıtlamıyor.

Onkeyup nasıl açılır ve onblur etkinleştirilir?

Ben bunu arıyordum, bu yüzden cevabı paylaşacağımı düşündüm.

Ben Foster'ın haklı olarak söylediği gibi, on-line aşağıdakileri yaparak devre dışı bırakılabilir

var validator = $("form").data("validator");
if (validator) {
    validator.settings.onkeyup = false;
}

Doğrulamayı etkinleştirmek için onfocusout'u kullanabiliriz

validator.settings.onfocusout = function(element)
{
    $(element).valid();
};

Yani kodumuz onkeyup'ı devre dışı bırakmak ve onblur'u etkinleştirmek

var validator = $("form").data("validator");
        if (validator)
        {
            validator.settings.onkeyup = false; 
            validator.settings.onfocusout = function(element)
            {
                $(element).valid();
            };
        }

9
2018-01-14 10:34





Belirli bir alana nasıl ayarlanacağını bilmiyorsunuz, ancak bunu anahtarlama doğrulamasını (tüm alanlar için) devre dışı bırakmak için deneyebilirsiniz:

$.validator.setDefaults({
   onkeyup: false
})

Görmek


5
2017-11-05 20:52



Evet, onu gördüm. Çoğu alandan hoşlanıyorum, sadece kredi kartı alanlarını veya uzaktan doğrulama alanlarını değil (bir karakterin her değişikliğinden ziyade web sitesini bir kez onblur'a vurmayı tercih ederim). Sadece yaşamak zorunda olduğum bir sınırlama olabilir. Muhtemelen yukarıda bahsettiğin gibi küresel setDefault'ları yapacağım. - Sam
... İlk başta bunu <script type = "text / javascript"> $ (function () {$ .validator.setDefaults ({onkeyup: false})}) kullanarak ayarlıyordum; </ script> Belge ve komut dosyalarının yüklendiğinden ve kullanıma hazır olduğundan emin olmak için işe yaramadı. Çalışması için onu çıkarmak zorundaydım, örneğin: <script type = "text / javascript"> $ .validator.setDefaults ({onkeyup: false})}); </ Script>. Ancak, kullanıcı henüz komut dosyalarını indirmeyi bitirmediyse ne olacağını merak ediyorum. Onları başının yerine belgenin altına koydum. - Sam
Sadece "onkeyup" özelliğini devre dışı bıraktı - Sam


Yukarıdaki gibi bir şeyi de kullanabilirsiniz.

$("form").validate({
    onfocusout: false,
    onkeyup: false
});

O zaman özel kuralların varsa,

$("form").validate({
    onfocusout: false,
    onkeyup: false,
    rules: {
        "name1": {
            required: true,
            email: true,
            maxlength: 100
        },
        "name2": {
            required: true,
            number: true
        }
    }
});

Bu cevap jQuery forumunda bana çok yardımcı oldu.


1
2018-04-22 07:38





Varsayılanları, kredi alanının onfocus olayında kapalı olarak ayarlayabilir, daha sonra onblur'da döndürebilirsiniz. Hayal gibi görünüyor, ama işe yarayabilir.


0
2017-11-05 21:16