jQuery在摄氏和华氏之间切换(来自我身边的坏逻辑)

时间:2018-03-20 11:44:17

标签: javascript jquery

我正在使用Ajax来使用openweather API。除了一件事,一切都很好。

我正试图在按摄氏度和华氏度之间切换按钮。 在第一次单击时,该函数将值转换为fahrenheit,但由于某种原因,当您再次单击该按钮时,它不会将其转换回摄氏温度。 我找到了不同的解决方案,但我真的想避免复制粘贴,并找出函数逻辑中的错误。我很感激你的帮助。 Js Fiddle:https://jsfiddle.net/m8w7gyxe/1/

LE:原来错误多于一个:)。谢谢大家。

J.M.的解决方案效果很好。 https://jsfiddle.net/m8w7gyxe/31/

<form>
   <input type="text" name="city" id="searchInput" placeholder="Search for a city...">
   <button type="button" id="searchBtn">
      <span class=" fa fa-search"></span>
   </button>
</form>
<div class="temperature">
   <div class="toggleBtn">
      <span>&#8451;</span> //celsius icon
   </div>
   <span id="temperature"></span>
</div>
<script>
    let degree = '&#8451'; //celsius icon
    let city = $('#searchInput');

    const celsiusToFahrenheit = (celsius) => {
        return (celsius * 9 / 5 + 32);
    }

    $('#searchBtn').on('click', function() {
        $.ajax({
            url: 'https://api.openweathermap.org/data/2.5/weather?q=' + city.val() + '&units=metric&APPID=MYAPPIDHERE',
            type: 'POST',
            dataType: 'json',
            success(response) {
                getResponse(response)
            },
            error(jqXHR, status, errorThrown) {
                alert('City not found...'); 
            }
        });
    });

    function getResponse(response) {
        $('#temperature').html(response.main.temp.toFixed() + ' ' + degree);

        $('.toggleBtn').on('click', function() {
            if (degree = '&#8451') { //if degree is celsius
                degree = '&#8457'; //change degree to fahrenheit
                $('#temperature').html(celsiusToFahrenheit(response.main.temp.toFixed()) + ' ' + degree);
            }
            if (degree = '&#8457') { // if degree is fahrenheit
                degree = '&#8451'; // change degree to celsius
                $('#temperature').html(response.main.temp.toFixed()  + ' ' + degree);

                console.log(degree); //&#8451
            }
        });
    }
</script>

2 个答案:

答案 0 :(得分:2)

几个问题:

  1. 是的,Introduceti numarul de vectori: 3 Introduceti numarul de elemente: 4 V0:1 2 3 0 V1:1 2 0 0 V2:1 0 0 1 1 2 3 0 1 2 0 0 1 0 0 1 1 2 3 0 0 0 0 0 0 0 0 0 1 2 3 0 0.642857 1.28571 -1.07143 0 0.8 -0.4 5.55112e-17 1 的处理程序应该在响应之外,如Mackija所述,您只需要值而不是响应来执行转换。

  2. 你说它可以从摄氏温度到华氏温度而不是其他方式,我没有看到从华氏温度转换为摄氏温度的功能。

  3. .on('click')不是比较,而是分配,所以总是通过。请改用if (degree = '&#8451')

  4. 您错过了if (degree == '&#8451')中的重要else,但没有else if (degree == '&#8457')正在运行。

  5. 此处进行相关编辑:

    if

    尝试并让我知道:https://jsfiddle.net/m8w7gyxe/26/

答案 1 :(得分:1)

我认为问题是你的处理程序是在你的“getResponse”函数中声明的,这意味着当它被点击时它会尝试使用

response.main.temp.toFixed()

它不能,因为当时没有回复。尝试将处理程序移到getResponse之外,而不是使用响应中的度数从页面上当前的内容中获取它(您只需要来回转换的数字,而不是响应)