2012-10-03 6 views
26

Mam następujący kod:jQuery sprawdzania Uncaught TypeError: nie można odczytać właściwość 'parametr nodeName' null

$(document).ready 
(
    function() 
    { 
     $.validator.addMethod(
     "lessThan", 
     function (value, element, param) 
     { 
      // bind to the blur event of the target in order to revalidate whenever the target field is updated    
      var target = $(param) 
      .unbind(".validate-lessThan") 
      .bind 
      (
       "blur.validate-lessThan", 
       function() 
       { 
        $(element).valid(); 
       } 
      ); 
      return parseFloat(value) <= parseFloat(target.val()); 
     }, 
     "Valoarea trebuie sa fie mai mica sau egala decat valoarea initiala" 
     ); 
    } 
); 


$('#gvListDetaliiElemTranAdaugare input[name$=Valoare]').each 
    (
     function (index, domEle) 
     { 
      $(this).rules 
      (
       "add" 
       , { 

        required: true, 
        minlength: 1, 
        range: [0.1, Number.MAX_VALUE], 
        lessThan: '#ListaDetaliiElemTranModelAdaugare_' + index + '__ValoareRamasa', 
        messages: 
        { 
         required: "Valoarea este necesara!", 
         minlength: "Valoarea este necesara!", 
         range: "Valoarea este necesara!", 
         lessThan: "Valoarea trebuie sa fie mai mica sau egala cu " + $('#ListaDetaliiElemTranModelAdaugare_' + index + '__ValoareRamasa').val() 


        } 
       } 
      ); 
     } 
    ); 

Kod zawiedzie to reeaches $ (this) .rules() z: Uncaught TypeError: Cannot read property 'nodeName' of null. html zwrócony przez $('#gvListDetaliiElemTranAdaugare input[name$=Valoare]') jest:

[ 
<input data-type=​"decimal" id=​"ListaDetaliiElemTranModelAdaugare_0__Valoare" name=​"ListaDetaliiElemTranModelAdaugare[0]​.Valoare" onchange=​"OnValoareChange($(this)​.val()​, 18590 , 0)​" type=​"text" value=​"0.00000000000">​ 
, 
<input data-type=​"decimal" id=​"ListaDetaliiElemTranModelAdaugare_1__Valoare" name=​"ListaDetaliiElemTranModelAdaugare[1]​.Valoare" onchange=​"OnValoareChange($(this)​.val()​, 22972 , 1)​" type=​"text" value=​"0.00000000000">​ 
, 
<input data-type=​"decimal" id=​"ListaDetaliiElemTranModelAdaugare_2__Valoare" name=​"ListaDetaliiElemTranModelAdaugare[2]​.Valoare" onchange=​"OnValoareChange($(this)​.val()​, 23036 , 2)​" type=​"text" value=​"0.00000000000">​ 
, 
<input data-type=​"decimal" id=​"ListaDetaliiElemTranModelAdaugare_3__Valoare" name=​"ListaDetaliiElemTranModelAdaugare[3]​.Valoare" onchange=​"OnValoareChange($(this)​.val()​, 23038 , 3)​" type=​"text" value=​"0.00000000000">​ 
, 
<input data-type=​"decimal" id=​"ListaDetaliiElemTranModelAdaugare_4__Valoare" name=​"ListaDetaliiElemTranModelAdaugare[4]​.Valoare" onchange=​"OnValoareChange($(this)​.val()​, 425306 , 4)​" type=​"text" value=​"0.00000000000">​ 
, 
<input data-type=​"decimal" id=​"ListaDetaliiElemTranModelAdaugare_5__Valoare" name=​"ListaDetaliiElemTranModelAdaugare[5]​.Valoare" onchange=​"OnValoareChange($(this)​.val()​, 425308 , 5)​" type=​"text" value=​"0.00000000000">​ 
, 
<input data-type=​"decimal" id=​"ListaDetaliiElemTranModelAdaugare_6__Valoare" name=​"ListaDetaliiElemTranModelAdaugare[6]​.Valoare" onchange=​"OnValoareChange($(this)​.val()​, 425309 , 6)​" type=​"text" value=​"0.00000000000">​ 
, 
<input data-type=​"decimal" id=​"ListaDetaliiElemTranModelAdaugare_7__Valoare" name=​"ListaDetaliiElemTranModelAdaugare[7]​.Valoare" onchange=​"OnValoareChange($(this)​.val()​, 425310 , 7)​" type=​"text" value=​"0.00000000000">​ 
] 
+0

dlaczego nie dodajecie tylko funkcji sprawdzania poprawności z jej regułami jako właściwościami w jsonie? –

+0

ponieważ potrzebuję przykładu: –

+0

sprawdź tę stronę http://jquery.bassistance.de/validate/demo/ –

Odpowiedz

69

znalazłem problem.

Problem polegał na tym, że kod HTML, który próbowałem zweryfikować, nie był zawarty w tagu <form>...</form>.

Tak szybko, jak to zrobiłem, miałem , która nie była pusta.

+4

Ten przyłapał mnie przez prawie 2 godziny ... element musi znajdować się wewnątrz formularza. Duhhhh :(Dzięki za udostępnienie! :) Wystarczy wspomnieć: w moim przypadku próbowałem dodać regułę do pliku wejściowego. Jest to tak pomocny błąd jaki dostałem w Firebug: 'elem null' w tej linii jQuery:' f (elem.nodeType && elem.nodeType! == 1 && elem.nodeType!== 9) ' –

+2

To sprawiło, że jestem idiotą w ciągu ostatniej godziny, pola były w formie, ale kiedy okno dialogowe jQuery zostało otwarte, przeniesiono je poza formularz, a następnie sprawdzanie poprawności zakończyło się dziwnym komunikatem o błędzie. Dlaczego interfejs użytkownika jQuery nie wyświetla komunikatu ostrzegawczego na konsoli? –

4

Problem się zdarzył, ponieważ próbowałem powiązać element HTML przed jego utworzeniem.

Mój skrypt został załadowany na kod HTML i musi zostać załadowany na dole mojego kodu HTML.

+0

dla mnie samego, Dodałem także reguły na zagnieżdżonym formularzu przed wstawieniem zdarzenia. Dzięki! –

0

Miałem ten problem i było tak, ponieważ panel znajdował się poza elementem [data-role = "page"].

4

Miałem ten problem w projekcie kręgosłupa: mój widok zawiera dane wejściowe i jest ponownie renderowany. Oto, co się dzieje (przykład dla pola wyboru):

  • Pierwszy render;
  • zastosowany jquery.validate, dodanie zdarzenia onClick na wejściu;
  • Wyświetl ponowne renderowanie, oryginalne wejście znika, ale jquery.validate jest nadal związany z tym.

Rozwiązaniem jest zaktualizowanie danych wejściowych zamiast ich ponowne renderowanie. Oto idea realizacji:

var MyView = Backbone.View.extend({ 
    render: function(){ 
     if(this.rendered){ 
      this.update(); 
      return; 
     } 
     this.rendered = true; 

     this.$el.html(tpl(this.model.toJSON())); 
     return this; 
    }, 
    update: function(){ 
     this.$el.find('input[type="checkbox"]').prop('checked', this.model.get('checked')); 
     return this; 
    } 
}); 

W ten sposób nie trzeba zmieniać istniejący kod wywołujący render(), po prostu upewnij się, że update() utrzymuje HTML w synchronizacji i jesteś dobry, aby przejść .

+0

Nie rozumiem tego, czy możesz mi powiedzieć, jak zastosować to w praktyce? – user3808307

0

Znalazłem tę odpowiedź, gdy otrzymałem podobny błąd dla nodeName po aktualizacji do Bootstrap 4. Problem polegał na tym, że karty nie miały klas nav i nav-tab; dodanie tych elementów do elementu <ul> rozwiązało problem.