2010-07-29 8 views
7

Utknąłem z powodu problemu z użyciem jQuery Validate. Chodzi o to, że mam kilka pól tekstowych z ich zestawem atrybutów maxlength. Chociaż nie są one wymagane, nadal nie sprawdzają poprawności, gdy są puste lub białe znaki.Wprowadzanie tekstu z maksymalną długością niepoprawną z jQuery Validate

Przykładowy HTML:

<input type="textbox" id="tbx1" maxlength="100" value="" />

Następnie $('#tbx1').valid() powraca false. Czy nie powinien zamiast tego zwracać true? Czy są jakieś znane sposoby obejścia tego problemu?

Och, i dodanie $('#myform').validate({ ignore: '#tbx1' }); nie działa dla mnie, ponieważ używam formantów ASP.NET z ich automatycznymi identyfikatorami. Wiem, że mógłbym użyć identyfikatora klienta kontroli lub czegoś w rodzaju IDOverride Wilco, ale to nie jest to, co wolę.

Ktoś więc? Dzięki!

+0

czy pole tekstowe jest wymagane? Myślę, że sprawdzanie poprawności wtyczki wyrównuje spacje, więc jeśli pole jest puste lub tylko spacje i wymagane, to nie będzie sprawdzane. – JKirchartz

+0

@JKirchartz o to chodzi. pole nie jest wymagane. Nie wiem, czy to błąd, czy projekt, ale chciałbym znaleźć obejście tego problemu. – rdumont

+0

To musi być błąd. Cierpię z tym samym. Masz pole, które NIE jest wymagane, ale po prostu daj mu maksimum i nagle wtyczka walidacyjna jquery sprawdza, czy nie sprawdza poprawności. 100% błąd. Innym znakiem rozpoznawczym jest to, że nawet nie podnosi błędu dla pola. Więc coś jest na pewno w tym miejscu. Frustracja, ponieważ muszę ustawić maksymalne limity na moich polach! – Aaron

Odpowiedz

0

Po pierwsze, zakładam, że dane wejściowe mają atrybut "nazwa" i po prostu nie są wyświetlane w twoim przykładzie? Jeśli nie, spróbuj tego i może to naprawić.

Po drugie, czy próbowałeś jawnie ustawić pole, które nie jest wymagane, ale aby mieć maksymalną długość w obiekcie walidatora? Na przykład:

var rules = { 
    'txtbx1': { 
    required: false, 
    maxlength: '100' 
    } 
}; 

$('#formId').validate({rules:rules}); 
+0

Dziękuję za odpowiedź, Philip, ale to nie rozwiązuje problemu. Zapomniałem o tym pytaniu, ponieważ zostało ono jednogłośnie uznane za błąd. Moje dane wejściowe nie miały atrybutu nazwy, ponieważ nie było potrzebne w tym kontekście. Ponadto, jak stwierdziłem w pytaniu, szukałem rozwiązania, które nie wymagałoby '$ ('# formId') validate (...);' – rdumont

3

wpadł na ten problem sam w niektórych złożonych form pisałem ...

Moje rozwiązanie jest po prostu stworzyć własną metodę MaxLength że mogę „MaxLen”, który działa niemal identycznie jak domyślna metoda pod inną nazwą. Po prostu wklej to powyżej swojego głównego połączenia sprawdzania poprawności ($ ("# mainform"). Validate ({}) lub jakikolwiek jest twój formularz).

//Custom Max Length Validation 
jQuery.validator.addMethod("maxLen", function (value, element, param) { 
    //console.log('element= ' + $(element).attr('name') + ' param= ' + param) 
    if ($(element).val().length > param) { 
     return false; 
    } else { 
     return true; 
    } 
}, "You have reached the maximum number of characters allowed for this field."); 

Kiedy już to zrobisz możesz dodać regułę tak:

rules: { 
     Message: { 
      required: false, 
      maxLen: 200 
     } 
} 
18

Wydaje się to być błąd w tej wtyczki. Jeśli go naprawiono, zastępując metodę niestandardową implementacją przy użyciu następującego kodu:

$.validator.addMethod("maxlength", function (value, element, len) { 
    return value == "" || value.length <= len; 
}); 
+1

To działało lepiej dla mnie niż ustawienie nowej nazwy dla mojego nowa metoda. Ustawiłem atrybut maxlength na polu wejściowym, nie próbowałem walidować przeciwko niemu. Na jednym poziomie nie czuję potrzeby sprawdzania poprawności - przeglądarka gwarantuje, że nie można dodać więcej niż określoną liczbę znaków, więc naprawdę nie widzę, w jaki sposób walidacja może zawieść? Ale nie ma żadnej szkody w sprawdzaniu poprawności, dopóki działa sprawdzanie poprawności. :) – Adam

+1

DZIĘKUJĘ !! ten błąd kosztował mnie kilka godzin! jest ponad mną, jak to może być problem po 2 latach. – black666

+0

Jest to przydatne, ponieważ sprawdzanie "maksymalnej długości" przeglądarki nie zawsze uwzględnia nowe znaki. Jak opisano [tutaj] (http://stackoverflow.com/questions/10030921/chrome-counts-characters-wrong-in-textarea-with-maxlength- attribute). – Peter

Powiązane problemy