2009-03-23 11 views
6

Zastanawiam się, czy możliwe jest, aby wtyczka walidatora jQuery sprawdzała elementy, które jeszcze nie istnieją w domenie, gdy reguły są początkowo skonfigurowane.jquery sprawdza poprawność elementów, które nie zostały jeszcze utworzone

Wywołanie metody .Rules ("dodaj", terapia) wiąże reguły z elementami istniejącymi w domenie. Gdybym miał je stworzyć. Sprawdzanie poprawności nie uruchamia się. jakieś pomysły?

Strona z walidatora używam: http://bassistance.de/jquery-plugins/jquery-plugin-validation/

Nowe elementy są tworzone poprzez http://ejohn.org/blog/javascript-micro-templating/

Zasadniczo jest wywołanie ajax i serwer zwraca kilka JSON, to json jest podawany (ajaj?) za pomocą silnika szablonowego resig. Przykładowy szablon wygląda tak:.

<script type="text/html" id="ProductsTemplateEdit"> 
    <td> 
     <input type="hidden" value="<#= item.ID #>" id="Edit.ID" name="Edit.ID" /> 
     <input type="text" value="<#= item.Price#>" id="Edit.Price" name="Edit.Price" /> 
    </td> 
</script> 

Wartości są oczywiście wypełnione przez JSON, który jest przekazywany w

Należy również wspomnieć, że używam xVal ramy walidacji, które w zasadzie automatycznie generuje jQuery sprawdzania poprawności reguł dla mnie: http://blog.codeville.net/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/

+0

Jak dodajesz swoje przedmioty? czy możesz podać próbkę kodu? Czy w twoim pytaniu możesz również umieścić link do wtyczki jQuery Validator? – bendewey

+0

aktualizacja pytania z więcej informacji – ChadT

Odpowiedz

2

Ok, spróbuj dwa. Czym jest dynamicznie dodawanie elementów? Nie możesz po prostu umieścić .Rules ("dodaj",) do tego samego kodu?

+0

Obecnie używam tej metody, ale miałem nadzieję, że będzie lepszy sposób (używając czegoś podobnego do wydarzeń na żywo, jak sugerowałeś wcześniej). – ChadT

+0

Myślę, że twoja obecna metoda jest bardziej "poprawna". Z tego, co opisałeś do tej pory, wygląda na to, że dzieje się to po stronie klienta. Czy zacząłeś zauważać spadek wydajności? Ostatnio słyszałem, że wydarzenia na żywo mogą zabić wydajność. –

0

będziemy chcieli zajrzeć do jQuery 1.3 nowego Live Events

+1

Jestem świadomy wydarzeń na żywo, ale nie widzę, w jaki sposób można je zaadaptować do użytku z jquery validate – ChadT

+0

od wersji 1.3.1 live() obsługuje tylko następujące "Możliwe wartości zdarzeń: kliknij, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypown, keyup " – bendewey

+0

Przepraszam, nie jestem w pełni zaznajomiony z elementami wewnętrznymi Validatora, ale czy nie powinien to być rodzaj niestandardowego wydarzenia? Jeśli tak, w tym przypadku można użyć wydarzeń na żywo. –

2

Hej, nie jestem pewien, czy to jest nieprofesjonalne włamanie, ale zadziałało to dla mnie. Wcześniej robiłem każdy() na selektorze i uruchamiam ten sam problem, co nowo utworzone elementy Ajaxed.

najechaniu myszką wydarzenie na żywo wydaje się to zrobić trick, przyznane UR nie jest szalony z CSS:

// >>> MSG/Comment form validator, now and forever... 
    $('form.streamForms').live('mouseover', function(){ 
     $(this).validate({ 
      rules: { 
       text: "required" 

      }, 
      messages: { 
       text: " " 
      } 
     });  
    }); 

Nadzieję, że to pomaga!

+1

Możesz także posłuchać "kliknięcia" zamiast "przesuwania kursora" jak w: [Sprawdzanie poprawności formularza załadowanego przez AJAX] (http://forum.jquery.com/topic/validate-validating-an-ajax-loaded-form) –

+0

Nie uruchomi się, jeśli ktoś przejdzie przez pola, live() nie obsługuje również fokusu. – ChadT

0

Oto, jak sobie z tym poradziłem. Najpierw stworzyłem mój obiekt sprawdzania poprawności.

 

    var myvalidations = {}; 
    myvalidation.registerform = function() { $("#registerform").validate({ 
      submitHandler: function(form) { 
       $(form).ajaxSubmit(optionspersonal); 
       //submitReg(); 
      }, 
        rules: { 
       firstname: { 
        required: true, 
        minlength: 5, 
        maxlenght: 22 
       }, 
        messages: { 
          firstname: { 
           required: "Tell us what to call you by.", 
        minlength: "Your username must consist of at least 5 characters" 
          } 
        } 
      }); 
     } 

Teraz, gdy tworzysz swoją postać upewnić się, że ma identyfikator na nim lub nieco odwołać go i po prostu zadzwonić do funkcji zaraz po jej utworzeniu.

 

    //create my content 
    $('.content').html('--fields etc--'); 
    //add validation 
    myvalidation.registerform(); 

Wszelkie dalsze sugestie mile widziane; ale myślę, że jest to właściwe podejście.

Powiązane problemy