¿cómo puedo obtener un valor del enésimo elemento de la ‘tr’ más cercana?

Tengo una tabla dinámica que contiene el precio, la cantidad y el subtotal en cada fila. Intento escribir un método de JavaScript que multiplique automáticamente los valores de precio y cantidad en cada tecla y los muestre como subtotal.

$('input.value').keyup( function() { var row = $(this).closest('tr'); var val1 = row.find(':nth-child(1)').value; var val2 = row.find(':nth-child(2)').value; console.log(val1); console.log(val2); output = row.find(':nth-child(3)'); output.value = val1 * val2; }); 

Esto es todo lo lejos que he llegado, el registro de la consola solo muestra “indefinido” como los valores de val1 y val2. ¿Por qué es esto? ¿Estoy entendiendo mal cómo funciona .find ()?

Intenté buscar tanto en stackchange como en google, y parece que no puedo encontrar un buen ejemplo de uso de nth-child basado en la fila seleccionada actualmente.

Aquí hay una versión simplificada de la fila de la tabla. Cada fila de la tabla tiene una identificación basada en su número de fila.

   Form->text("Items.{$key}.quantity", array('value' => $item['quantity'], 'class' => 'value')); ?>   Form->text("Items.{$key}.price", array('value' => $item['price'], 'class' => 'value')); ?>   Form->text("Items.{$key}.total", array('value' => number_format( $item['price']*$item['quantity'], 2), 'class' => 'subtotal')); ?>   

Estoy usando jquery, y cakephp 2.7

En su código, row.find(':nth-child(1)') selecciona un elemento

– el primer elemento secundario de

. Pero parece que desea seleccionar elementos en cada fila para obtener sus valores.

En mi ejemplo, a continuación, le he dado a cada entrada una clase que lo identifica como un campo de “cantidad”, “precio” o “total”. Encuentro la fila más cercana a la actual. Luego, encuentro el valor de cada entrada dentro de esa fila, calculo el total y establezco el valor del “total” a ese número.

Estoy usando el contexto selector de jQuery, que es internamente equivalente a find() .

 $('input.value').keyup(function() { var $row = $(this).closest('tr'); $output = jQuery('input.total', $row), quantity = jQuery('input.quantity', $row).val(), price = jQuery('input.price', $row).val(), total = quantity * price; $output.val(total); }); 
  

jQuery no tiene propiedad de value … use val() y suponiendo que los selectores son válidos, debería funcionar

 var val1 = row.find(':nth-child(1)').val();