Soy un completo principiante tratando de construir una calculadora de energía solar (¿por qué me hice esto a mí mismo?) He intentado todo pero todavía estoy atascado. La idea es que los usuarios usen un control deslizante de rango para agregar su factura mensual de electricidad a una calculadora. Luego, quiero usar lo que ingresaron en un cálculo para convertir su factura mensual a kwh, pero el registro de la consola muestra "indefinido". Tengo algunas constantes que funcionan con el valor ingresado por el usuario. El cálculo funciona si se usa sin la entrada del usuario para la factura mensual de electricidad: una constante (lo probé) pero no puedo entender cómo usar la entrada del usuario en el cálculo. Aquí hay un codepen de lo que hice. La función que obtuve allí es probablemente un desastre total, pero no sé cómo solucionarlo. Por favor, ayuda, mi cerebro se ha vuelto papilla y esto es para mañana. Empecé hace como un mes con esto de tener que reiniciar todo el tiempo porque hay mucho que necesita entrar aquí y no sé lo que estoy haciendo.
<h2>Solar Power Calculator</h2> Monthly Electricity Bill: <input type="range" min="100" max="10000" value="0" step="1" onchange="getSliderValues(this.value)" style="width:400px;"> <span id="monthlyBillval">0%</span> <h2>Monthly Bill to KWH <span id="monthlyBill"></span></h2> //initial variables var phases = 1; var systemCost = 247765.00; var sizeOfPanelArray = 8.19; var batteryBankCapacity = 22.20; var payBackPeriod = 5.3; var monthlyEstimatedSavings = 3864.00 // var amortData = []; // Constants var singlePhaseBaseCost = 41000; var threePhaseBaseCost = 69000; var panelCost = 2639; var fiveKwSinglePhaseInverter = 17371; var eightKwSinglePhaseInverter = 28344; var twelveKwThreePhaseInverter = 43783; var batteryCost = 29160; var panelPeakPower = 455; var avgDailySunHrs = 5.33; var avgDaysPerMonth = 30.5; var batteryCapacity = 7.4; var maxCeilingDiscountedBracketInRands = 1440; var lowBracketKwh = 600; var discountedTarrif = 2.400395; var higherTarrif = 3.312575; function getSliderValues (billSlider){ var monthlyBill = document.getElementById('monthlyBill'); var monthlyBillval = document.getElementById('monthlyBillval'); monthlyBillval.innerHTML = billSlider;} var monthlyBillToKwhConversion; if (monthlyBillval < maxCeilingDiscountedBracketInRands) { monthlyBillToKwhConversion = monthlyBillval / higherTarrif } else if (monthlyBillval > maxCeilingDiscountedBracketInRands) { monthlyBillToKwhConversion = Math.round (((monthlyBillval - maxCeilingDiscountedBracketInRands)/ higherTarrif) + (maxCeilingDiscountedBracketInRands/discountedTarrif)) } console.log("monthly bill to kWh conversion:" + monthlyBillToKwhConversion);
Está intentando acceder a la variable monthlyBillval
desde fuera del alcance de la función donde está definida. Eso no es posible en Javascript ya que solo se puede acceder a cada variable dentro del alcance de la función que la definió.
Por lo tanto, todas sus verificaciones if arrojan false
, por lo tanto, monthlyBillToKwhConversion
permanece sin definir
Considere devolver algo de su función si necesita fuera de ella.
Además, en Javascript moderno se considera una mejor práctica evitar la declaración var
porque podría generar resultados inesperados y estropear el alcance global. Debe usar let
y const
para definir sus variables.
Su código tiene algunos problemas de alcance, también:
var monthlyBillval = document.getElementById('monthlyBillval');
mensualBillval es un elemento no valor, no puede hacer esto:
monthlyBillToKwhConversion = monthlyBillval / higherTarrif
puedes ver el código de trabajo en codeopen