Javascript Onclick功能在切换温度时不起作用

时间:2017-10-05 20:58:39

标签: javascript function api weather-api

我正在研究天气预报,而且我在摄氏和华氏之间无法切换。

我使用了一个单独的函数来获取位置以及从API调用。

我还在第二个函数中添加了一个onclick函数。我可以让它切换到一个温度,但不能回来。

function getTemp(data) {
  // API variables
  var temp1 = data.main.temp;
  var weatherUrl = data.weather[0].icon;
  var tempInC = Math.round(temp1); // Temp in Celsius
  var tempInF = Math.round(temp1 * 9/5 +32)

  // Inner HTML variables
  var weatherF = "The weather is " + tempInF + " &#8457; <br>" +
     "<img src='" + weatherUrl + "'/>";
  var weatherC = "The weather is " + tempInC + " &#8451; <br>" +
     "<img src='" + weatherUrl + "'/>";

  // Button DOM variables
  var buttonText = document.getElementsByTagName("button")[0].innerText;
  var buttonId = document.getElementById('btn');
  x.innerHTML = weatherF;

  buttonId.onclick = function toggleTemp() {
    if(buttonText == "Convert to Celsius") {
       x.innerHTML = weatherC; 
     buttonId.innerText = "Convert to Fahrenheit";
    } else {
      x.innerHTML = weatherF;
      buttonId.innerText = "Convert to Celsius";
    }
  }
}

我使用 innerText ,因为我认为这是在temp之间来回切换的最简单方法。我可以将天气转换为Celsius,但else语句不起作用。 Fyi,我无法使用标签名称来更改按钮文本,这就是我在按钮点击功能中使用 id 的原因。我在Javascript上还很新。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

切换buttonText的文字时,您需要更新buttonId变量。

buttonId.onclick = function toggleTemp() {
  if (buttonText == "Convert to Celsius") {
    x.innerHTML = weatherC;
    buttonText = buttonId.innerText = "Convert to Fahrenheit";
  } else {
    x.innerHTML = weatherF;
    buttonText = buttonId.innerText = "Convert to Celsius";
  }
}

答案 1 :(得分:0)

您的变量x未定义。将来,请尽量避免使用innerHTML属性,这可能会破坏事件侦听器并且渲染速度很慢。

buttonText函数的范围内未定义xonclick,这可能就是没有任何反应的原因。你检查过控制台是否有错误吗?

function getTemp(data) {
    // API variables
    var temp1 = data.main.temp;
    var weatherUrl = data.weather[0].icon;
    var tempInC = Math.round(temp1); // Temp in Celsius
    var tempInF = Math.round(temp1 * 9/5 +32)

    // Inner HTML variables
    var weatherF = "The weather is " + tempInF + " &#8457; <br>" +
        "<img src='" + weatherUrl + "'/>";
    var weatherC = "The weather is " + tempInC + " &#8451; <br>" +
        "<img src='" + weatherUrl + "'/>";

    // Button DOM variables
    var x = ...;  // Declare x for the function scope here
    var buttonText = document.getElementsByTagName("button")[0].innerText;
    var buttonId = document.getElementById('btn');
    x.innerHTML = weatherF;

    buttonId.onclick = (function (x, wC, wF, btn) {
        return function () {
            // Change DOM
            if(btn.innerText == "Convert to Celsius") {
                x.innerHTML = wC; 
                btn.innerText = "Convert to Fahrenheit";
            } else {
                x.innerHTML = wF;
                btn.innerText = "Convert to Celsius";
            }
        };
    })(x, weatherC, weatherF, document.getElementsByTagName("button")[0])
}