Tengo una página donde los usuarios ingresan cantidades para artículos y varios totales se calculan utilizando información relacionada con dichos artículos. Estoy tratando de mostrar los agregados de los totales de los artículos y para obtener los valores que necesito, estoy verificando que cada elemento involucrado en el cálculo tenga algún tipo de valor antes de intentar hacer algo. Sin embargo, cuando intento verificarlo, aparece un error que dice que el método no está definido.

if(itemTotals[i].innerHTML != "" && itemMaps[i].innerHTML != "" && itemCogs[i].innerHTML != "" && itemQuantities[i].value != ""){
    //Increment totals
}

La parte itemQuantities[i].value es lo que arroja el error. He intentado usar .val() y .attr("value") pero ninguno de ellos funciona. Simplemente recibo el mensaje de que lo que haya intentado no es una función. ¿Cómo puedo recuperar el valor de cada campo de entrada en este contexto? ¿Estoy recuperando los campos de entrada incorrectamente?

La matriz se inicializa de la siguiente manera.

var itemQuantities = document.getElementsByClassName("inputQty");

Las otras matrices involucradas en los cálculos usan el mismo método .getElementsByClassName y de acuerdo con la consola, todas las celdas de la tabla pertenecientes a los nombres de clase que especifiqué (no son importantes para este escenario) se recuperan sin error.

0
user3521737 13 may. 2016 a las 20:26

3 respuestas

La mejor respuesta

El atributo .value funciona. Simplemente no estaba verificando correctamente para ver si la entrada estaba vacía. La entrada en los cuadros de cantidad se utiliza para multiplicar varios costos para determinar ciertos agregados. Terminé usando isNaN() para lograr el resultado deseado.

0
user3521737 13 may. 2016 a las 22:22

Acabo de señalar que está indexando las variables con un indexador "i", por lo que si estas listas no tienen la misma longitud, está en problemas.

Solo asegúrese de que estas listas sean simétricas y tengan la misma longitud.

0
user4615488user4615488 13 may. 2016 a las 17:37

.val () y .attr () son métodos jQuery. No existen en Javascript normal.

Obtienes los elementos con esto:

var itemQuantities = document.getElementsByClassName("inputQty");

GetElementsByClassName es un método de JavaScript 'normal'. Por lo tanto, no obtiene adiciones de jQuery a los elementos de forma predeterminada.

Intenta de esta manera:

var itemQuantities = $('.inputQty');

Luego use los métodos .val () y .attr () en ellas.

Y en lugar de usar el índice para recorrer la lista, puede hacerlo así:

itemQuantities.each(function(item) {
    ...
    doWhateverYouWantWithEach($(item));
    ...
});

O

itemQuantities.each(function() {
    ...
    doWhateverYouWantWithEachItem($(this));
    ...
});
0
Nelson Teixeira 13 may. 2016 a las 18:11