- Posts: 56
- Thank you received: 0
Ask the community, share ideas, and connect with other LimeSurvey users!
<script type="text/javascript" charset="utf-8"> $(document).on('ready pjax:scriptcomplete', function() { var thisQuestion = $('#question{QID}'); // Asignar clases a las celdas de entrada y salida $('.answer-item.answer_cell_SQ001', thisQuestion).addClass('input-value'); $('.answer-item.answer_cell_SQ002', thisQuestion).addClass('output-value'); // Hacer que las celdas de salida sean de solo lectura $('.output-value input[type="text"]', thisQuestion).prop('readonly', true); // Detectar cambios en tiempo real en las celdas de entrada $('.input-value input[type="text"]', thisQuestion).on('input', function() { handleCalculation($(this)); }); function handleCalculation(thisInput) { var thisRow = $(thisInput).closest('tr.subquestion-list'); var rowIndex = thisRow.index() + 1; var inputValue = parseFloat($(thisInput).val().replace(/\./g, '').replace(',', '.')) || 0; // Remover puntos y cambiar coma por punto para cálculos var resultValue = 0; // Determinar el multiplicador basado en el índice de la fila switch (rowIndex) { case 1: resultValue = inputValue * 100000; break; case 2: resultValue = inputValue * 50000; break; case 3: resultValue = inputValue * 20000; break; case 4: resultValue = inputValue * 10000; break; case 5: resultValue = inputValue * 5000; break; case 6: resultValue = inputValue * 1000; break; default: resultValue = 0; } // Mostrar el resultado sin separadores de miles ni decimales var formattedResult = resultValue.toFixed(0); // Redondear y convertir a entero var outputValueCell = $('.answer_cell_SQ002', thisRow); if (resultValue > 0) { $('input:text', outputValueCell).val(formattedResult).trigger('change'); // Mostrar el número sin decimales } else { $('input:text', outputValueCell).val('').trigger('change'); } // Calcular y mostrar el total acumulado de la columna 1 calculateAndDisplayColumnTotal(); } function calculateAndDisplayColumnTotal() { var totalColumn1 = 0; // Iterar sobre todas las filas para sumar los resultados de la columna 1 $('.output-value input[type="text"]').each(function(index) { if (index % 2 === 0) { // Columna 1: índices pares (0, 2, 4, ...) var value = parseFloat($(this).val().replace(/\./g, '').replace(',', '.')); // Remover puntos y convertir a número totalColumn1 += value; } }); // Mostrar el total acumulado de la columna 1 en la celda después del caso de 1.000 var totalColumn1Row = $('#answer{QID}Q1_SQ007'); // Reemplaza con el ID correcto de la fila para el total de columna 1 $('input:text', totalColumn1Row).val(totalColumn1.toFixed(0)).trigger('change'); // Mostrar el número sin decimales } }); </script>