2012-02-21 8 views
25

Mam niektóre dynamicznie wstawiane pola formularza na stronie w projekcie MVC3. Zwykle dodamy stronę serwera sprawdzania poprawności jQuery, ale w tym przypadku nie możemy (wiele pól w interfejsie użytkownika generuje wartość dla jednego ukrytego pola - i to jest to, co zostało przesłane.) Nie możemy potwierdzić w odniesieniu do ukrytego pola, więc musimy zamiast dodać walidację UI tylko dla pól użytkownik może widzieć)Dodawanie reguł sprawdzania poprawności jQuery do dynamicznie tworzonych elementów w ASP

gdy pola są dynamicznie dodawane do strony, ja uruchomić poniższy kod na pojemniku:

$container.find(".date").rules("add", { 
    required: true, 
    messages: { 
     required: "The date is required" 
    } 
}); 

Ale to nie robi nie działa! Co dziwne, wyłączenie powyższego kodu, tworzenie elementów dynamicznych, a następnie uruchomienie kodu w konsoli JS przeglądarki działa, ale pokazuje tylko domyślny komunikat sprawdzania poprawności.

Brakuje mi. Jakieś pomysły?

używam jQuery Validation 1.9.0 & plugin dyskretny

Odpowiedz

6

Teraz rozumiem, co się dzieje z dyskretny stronie wtyczki rzeczy (co Rozumiem, że jest jakoś powiązany z ASP.NET. Oto, co musisz zrobić:

Po dodaniu nowego elementu zadzwoń pod numer $.validator.unobtrusive.parseElement(newElement), a zostanie on dodany do formularza. Zgodnie z sugerowaną odpowiedzią, musisz ustawić atrybuty data-val i val-data-wymagane w nowym elemencie formularza.

więc skończyć z tym:

//create new form element 
$('form fieldset').append('<br>New Field: '+ 
    '<input type="text" data-val="true" data-val-required="A date is required." name="newField">'+ 
    ' * Also required'); 

//add new rules to it 
$.validator.unobtrusive 
    .parseElement($('form').find('input[name="newField"]').get(0)); 

Pokazany tutaj: http://jsfiddle.net/ryleyb/LNjtd/2/

+0

Ach, dobrze! Mogę zrobić niestandardową metodę, aby to zrobić i dodać atrybuty danych w wybranym polu naraz. –

+4

Nawet w JSFiddle nie działa. – Gabriel

51

Jak się okazuje, można to zrobić głównie w HTML, dodając kilka atrybutów dla każdego elementu formularza:

  • name przypisują
  • data-val="true"
  • data-val-required="message"

tak:

<input type='text' name="date" data-val="true" data-val-required="A date is required." /> 

Następnie forma po prostu musi być ponownie przeanalizowany przez JS:

//Remove current form validation information 
$("form") 
    .removeData("validator") 
    .removeData("unobtrusiveValidation"); 

//Parse the form again 
$.validator 
    .unobtrusive 
    .parse("form"); 
+1

5,5 lat później, nadal działa jak mistrz podczas wstrzykiwania nowe widoki cząstkowe w interfejsie edytora. – Tommy

1

Chyba coś bardziej prostego złego - jak twój find('.date') nie został faktycznie znalezienie byle co. W przeciwnym razie twój kod wydaje mi się całkiem rozsądny. Oto przykład, że działa zgodnie z oczekiwaniami: http://jsfiddle.net/ryleyb/LNjtd/

byłem w stanie sprawdzić kod poprawnie z tym:

$('form fieldset') 
    .append('<br>New Field: <input type="text" name="newField"> * Also required') 
    .find('input[name="newField"]').rules('add', { 
     required: true, 
     messages: { 
     required: 'New field is required' 
     } 
    } 
);​ 
+0

To prawda, ale nie dodałeś odwołania do wtyczki Unftrusive Validation - wydaje się, że jest to problem. Zaktualizowałem go, aby uwzględnić to: http: // jsfiddle.net/LNjtd/1/ –

+0

Huh, nie tylko to, wysłałem ci link do niewłaściwego jsfiddle :) – Ryley

+0

Ale też, nie przyłapałem się na tym, że dyskretna wtyczka była spokrewniona i nie wiem nic o tym, jak ASP.NET generuje swoje formy, a następnie używa ich ... więc tak, jesteś sam i brzmisz jak znalazłeś działające rozwiązanie. – Ryley

Powiązane problemy