2010-07-26 16 views
29

Przeszukuję komórki w wierszu tabeli. każda komórka ma pole tekstowe, a ja chcę wziąć wartość pola tekstowego i wepchnąć ją do tablicy.HTMLInputElement nie ma metody "val"

function dothing() { 
     var tds = $('#'+selected+' td'); 
     var submitvals = new Array(); 
     tds.each(function(i) { 
      var val = $(this).children('input')[0].val(); 
      submitvals.push(val); 
     }); 
    } 

Tam jest więcej funkcji, ale to wszystko, co istotne. Z jakiegoś powodu, po uruchomieniu tego kodu, otrzymuję "HTMLInputElement nie ma metody" val "." Myślałem, że elementy wejściowe powinny mieć w jQuery metodę val(), która ma tę wartość, więc nie ma to sensu. Czy brakuje mi czegoś lub robię to źle?

Odpowiedz

63

val() to metoda jQuery. .value jest własnością elementu DOM. Używać [0].value lub .eq(0).val() ....

+1

Twoja odpowiedź pomaga mi. bardzo, bardzo. – hiway

2
function dothing() { 
    var tds = $('#'+selected+' td'); 
    var submitvals = new Array(); 
    tds.each(function(i) { 
     var val = $($(this).children('input')[0]).val(); 
     submitvals.push(val); 
    }); 
} 
+2

trochę przesady, aby wyodrębnić element surowy i ponownie jQuerize .. –

+0

tak, zgadzam się z tobą, ale chciałem pokazać, że metoda val() to metoda $(), a nie element DOM. – edtsech

2

.val() to metoda jQuery. Używając [0], zwraca element DOM, a nie elementu jQuery

var val = $(this).children('input:first').val(); 
16

.val() jest funkcją jQuery nie jest funkcją JavaScript. W związku z tym, należy zmienić:

var val = $(this).children('input')[0].val() 

Do:

var val = $(this).children('input:eq(0)').val() 
0

Co ja nie rozumiem, dlaczego żaden z proponowanych składni na tej lub innych pytań podobnych do tego wydają się działać dla mnie. Musiałem zrobić próbę i błąd i ostatecznie musiałem użyć:

MySelectElement.value = x;

Nie pomogło również to, że sugestie Visual Studio Intellisense oferują cały szereg innych nietrwałych nazw metod, takich jak ValueOf().

Powiązane problemy