Я пытаюсь создать программу преобразования температуры на основе переключателей

#javascript #php

#javascript #php

Вопрос:

Моя программа предупреждает меня при первом запуске, и она не преобразует, когда я нажимаю кнопку «Рассчитать!». кнопка.

 <div id="input"> 
<form method = "post" action = "hw07.php" name = "form">
Temperature: <input type="text" id="num" name="temperature"> <br />
<input type="radio" name="con" value="far" id="far"> Convert to Fahrenheit 
<br />
<input type="radio" name="con" value="cel" id="cel"> Convert to Celcius 
<br />
 <input type="button" name="submit" value="Calculate!" id="submit">
</form>
</div>
<div id = "results"></div>

    window.addEventListener("load", link_events, false);  
function link_events() {
var temp = document.getElementById("num");
document.getElementById("submit").onclick = calculate(temp);
} 
function calculate(temp) {
if(isNaN(temp)){
    alert("Not numeric")
}
if (document.getElementById("far").checked) {
document.getElementById("results").innerHTML = "Temperature is"   
Math.round(num-32)*5/9;
}
 else if (document.getElementById("cel").checked){
document.getElementById("results").innerHTML = "Temperature is"   Math.round(num*9/5) 32;
}
else
alert("choose a conversion");
return false;
} 
  

Я хочу, чтобы она предупреждала меня, когда я нажимаю кнопку «Рассчитать!», а не при запуске программы. Ей нужно напечатать преобразованное значение, но она даже ничего не печатает atm.

Комментарии:

1. Есть ли у вас <script> … </script> в вашем javascript?

Ответ №1:

У вас есть несколько проблем в вашем коде.

  • Element.onclick свойство должно быть функцией, а не значением результата функции
  • Чтобы получать правильный пересчет при каждом нажатии кнопки, вам нужно получить значение температуры из поля ввода внутри функции calculate (Также не забудьте проанализировать его в числовой тип, поскольку он имеет строковый тип)
  • Последняя — это таинственная num переменная, которая, очевидно, должна быть temp

Вся эта проблема решается в приведенном ниже коде. Надеюсь, это поможет.

 window.addEventListener("load", link_events, false);

function link_events() {
  document.getElementById("submit").onclick = calculate;
}

function calculate() {
  var temp = Number(document.getElementById("num").value);
  
  if (isNaN(temp)) {
    alert("Not numeric")
    return
  }
  
  if (document.getElementById("far").checked) {
    document.getElementById("results").innerHTML = "Temperature is "   Math.round(temp - 32) * 5 / 9;
  } else if (document.getElementById("cel").checked) {
    document.getElementById("results").innerHTML = "Temperature is "   Math.round(temp * 9 / 5)   32;
  } else {
    alert("choose a conversion");
  }
  
  return;
}  
 <div id="input"> 
<form method = "post" action = "hw07.php" name = "form">
Temperature: <input type="text" id="num" name="temperature"> <br />
<input type="radio" name="con" value="far" id="far"> Convert to Fahrenheit 
<br />
<input type="radio" name="con" value="cel" id="cel"> Convert to Celcius 
<br />
 <input type="button" name="submit" value="Calculate!" id="submit">
</form>
</div>
<div id = "results"></div>  

Ответ №2:

     just remove this line 
      window.addEventListener("load", link_events, false);
    and change the link_events function
            function link_events() {
                var temp = document.getElementById("num");
                  calculate(temp.value);
            }
    and add onClick event to button 
    <input type="button" name="submit" value="Calculate!" id="submit" onclick="link_events()">

also i corected this function

function calculate(temp) {
            if (isNaN(temp)) {
                alert("Not numeric")
            }
            if (document.getElementById("far").checked) {
                document.getElementById("results").innerHTML = "Temperature is"  
                    Math.round(temp - 32) * 5 / 9;
            }
            else if (document.getElementById("cel").checked) {
                document.getElementById("results").innerHTML = "Temperature is"   Math.round(temp * 9 / 5)   32;
            }
            else
                alert("choose a conversion");
            return false;
        } 

num is not a  variable should be temp in Math.round()