javascript - 单击时如何使用 toggleClass 在我的 $ ('p' ) 标签上在华氏温度和摄氏温度之间切换

标签 javascript jquery jquery-events

为什么 toggleClass() 不能在 $('p') 上工作,该 $('p') 应该在华氏温度和摄氏温度之间切换,然后返回华氏温度等等用户想要多少次?

代码链接:http://codepen.io/duel_drawer8/pen/bpoozL

如果你看不到链接,我的完整代码:

//Our ID key for weather app
var appID = "&APPID=f74316dbe7442f12d602b1cae1a5172b";

var city;
var state;
var fahrenheit = "&units=imperial";
var temp;

//using a geo-location API to get city and state info of current user
$.getJSON('http://ip-api.com/json/?callback=?', function(data) {
  city = data.city;
  state = data.regionName;
  getWeather(city, state);
});

//using weather API and outputting results into our HTML
function getWeather(city, state) {
  var api = "http://api.openweathermap.org/data/2.5/weather?q=" + city + "," + state + "" + fahrenheit + "" + appID;

$.ajax({
url: api,
dataType: 'json',
success: function(data) {
  temp = data.main.temp;
  $('h3').text(city + "," + state);
  $('p').html(temp + '&deg F');
 
  }
 });
}

$('p').on('click', function(){
    $('p').text(changeTemp(temp));
    $('p').toggleClass(changeTemp(temp));
});

function changeTemp(temp){
   var cel = (temp - 32) * 5/9;
   return cel;
};

最佳答案

向 p 标记添加一个类,以决定是否应在下次点击时插入摄氏度或华氏度。

然后在每次点击时切换类别。

由于您将温度作为全局变量,因此无需将其传递给函数。

创建不同的函数来添加华氏温度或计算摄氏温度。

$('p').on('click', function(){
  $('p').toggleClass('celcius');
  $('p').toggleClass('fahrenheit');

  if ($(this).hasClass('celcius')) {
    $('p').text(setFahrenheit());
    return;
  }

  $('p').text(setCelcius());
});

function setCelcius(){
  var cel = (temp - 32) * 5/9;
  return cel + "° C";
};

function setFahrenheit(){
  return temp + "° F";
};

Here is my codepen-fork

或者另一种方法——也许更简洁的方法:

  • 计算 ajax 成功中的两个临时值并将其存储在一个对象中
  • 将数据属性添加到 p 标签以决定接下来显示哪个值
  • 点击 - 根据数据属性决定显示哪个值并切换数据属性

Here is another codepen-fork

关于javascript - 单击时如何使用 toggleClass 在我的 $ ('p' ) 标签上在华氏温度和摄氏温度之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36370772/

相关文章:

javascript - 当帖子正文内容为 JSON 但响应为 HTML 时,发出 jquery ajax post 请求

javascript - 如何区分通过鼠标滚动和在 JavaScript 中以编程方式滚动?

javascript - 如何触发 ESC 按钮以清除文本框中输入的文本?

javascript - 在客户端执行 jsx 转换

Javascript 将数组解析为输入参数

javascript - 使用 jQuery 和 YouTube API 加载事件

javascript - jQuery 是否会从已销毁的 DOM 内容中删除事件监听器?

javascript - OrbitControls 在 Angular2 和 Three.js 中未定义

javascript - 单击链接时如何将整个页面加载到 div 中?

javascript - JSON 列表 ASP.net MVC