2016-08-25 3 views
0

Я работаю над приложением для небольшой погоды. Последнее, что я пытаюсь сделать, - сделать значок большой погоды щелчком мыши, чтобы переключить единицу ° между Фаренгейтом и Цельсием.Функция Javascript Click не работает

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

function getLocation() { 
 
    if (navigator.geolocation) { 
 
    navigator.geolocation.getCurrentPosition(showPosition); 
 
    } else { 
 
    ausgabeLocation.innerHTML = "Geolocation is not supported by this browser."; 
 
    } 
 
} 
 

 
function showPosition(position) { 
 
    var lon = position.coords.longitude; 
 
    var lat = position.coords.latitude; 
 
    var jsonURL = 'http://api.openweathermap.org/data/2.5/weather?lat=' + lat + '&lon=' + lon + '&units=imperial&APPID='; 
 
    getWeather(jsonURL, lon, lat); 
 
} 
 

 
function getWeather(jsonURL, lon, lat) { 
 

 
    $.getJSON(jsonURL, function(json) { 
 
    var tempFahr = json['main']['temp']; 
 
    var tempCels = Math.floor(((tempFahr - 32)/1.8) * 100)/100; 
 
    var iconID = json['weather'][0]['id']; 
 
    var city = json['name']; 
 
    ausgabeLocation.innerHTML = city; 
 
    ausgabeTemp.innerHTML = tempCels + "°C"; 
 
    $("#iconShow").html("<i class='owf owf-" + iconID + "'></i>"); 
 
    }); 
 
} 
 

 
$(document).ready(function() { 
 
    getLocation(); 
 
    var unitSwitch = false; 
 
    $('.swapUnit').click(function() { 
 
    if (unitSwitch) { 
 
     $(this).html(tempCels + " '°C'"); 
 
     unitSwitch = false; 
 
    } else { 
 
     $(this).html(tempFahr + " '°F'"); 
 
     unitSwitch = true; 
 
    } 
 
    }) 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<body> 
 
    <h1 id="ausgabeLocation" class="text-center"></h1> 
 
    <div id="cont-center" class="box container-fluid box-shadow"> 
 

 

 
    <span id="iconShow" class="icon1"></span> 
 
    <div id="ausgabeTemp" class="swapUnit"> 
 
     </h2> 
 
    </div> 
 

 
</body>

Вы можете смотреть на все вещи здесь: http://codepen.io/ttimon/pen/QEPZJW

Спасибо.

Редактировать: Хорошо, я изменил некоторые вещи, и теперь у меня это работает. См. Код ниже. Единственное, что мне интересно, это то, что я мог бы сделать это без использования глобальных переменных.

Javascript

function getLocation() { 
    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(showPosition); 
    } else { 
     ausgabeLocation.innerHTML = "Geolocation is not supported by this browser."; 
    } 
} 
function showPosition(position) { 
    var lon = position.coords.longitude; 
    var lat = position.coords.latitude; 
    getWeather(lon, lat); 
} 

function getWeather(lon,lat){ 
     var jsonURL = 'http://api.openweathermap.org/data/2.5/weather?lat=' + lat + '&lon=' + lon + '&units=metric&APPID=af0761262e54344b40ea5757a84f9e81'; 
     $.getJSON(jsonURL,function(json){ 
      var temp = json['main']['temp']; 
      var iconID = json['weather'][0]['id']; 
      var city = json['name']; 
      writeStuff(temp,iconID,city); 
      }); 
     function writeStuff(temp,iconID,city){ 
      window.tempFahr = Math.floor(temp*9/5+32); 
      window.tempCels = Math.floor(temp*100/100); 
      ausgabeLocation.innerHTML = city; 
      ausgabeTemp.innerHTML = tempCels + "°C"; 
      $("#iconShow").html("<i class='owf owf-"+iconID+"'></i>"); 
     } 

} 

$(document).ready(function() { 
    getLocation(); 
    var unitSwitch = false; 
    $(document).on('click','#iconShow',function() { 
       if(unitSwitch===true){ 
     ausgabeTemp.innerHTML = tempCels + '°C'; 
     unitSwitch = false; 
    }else{ 
     ausgabeTemp.innerHTML = tempFahr + '°F'; 
     unitSwitch = true; 
    } 
      }); 
}); 

HTML

<body> 
<h1 id="ausgabeLocation" class="text-center"></h1> 
<div id="cont-center" class="box container-fluid box-shadow"> 


    <span id="iconShow" class="icon1" ></span> 
    <div id="ausgabeTemp" class="swapUnit"></div> 
</div> 

</body> 
+1

Ваша проблема в переменной области. Вы нажимаете делегат, не имеет понятия 'tempCels' или' tempFahr', потому что они объявлены в рамках 'getWeather' –

+0

@IanBrindley Благодарим вас за отзыв. Как я могу это исправить? Как я могу сделать эти переменные доступными для функции click? – user2317500

+0

@IanBrindley Привет за ваш совет. Сейчас я работаю. См. Мое редактирование в исходном сообщении. У меня только один вопрос. Возможно ли это, если не использовать глобальные переменные, или это нормально использовать глобальные переменные здесь? Спасибо за вашу помощь. – user2317500

ответ

1

Вторая проблема нет правильного закрытого тега. Так что этот код

<div id="ausgabeTemp" class="swapUnit"></h2> 

заменить на

<div id="ausgabeTemp" class="swapUnit"></div> 
+0

кричит, спасибо! – user2317500

0

Вы получаете следующее сообщение об ошибке:

Mixed Content: The page requested an insecure XMLHttpRequest endpoint ' http://api.openweathermap.org/data/2.5/weather?lat=32.647371&lon=35.42155100000001&units=imperial&APPID=af0761262e54344b40ea5757a84f9e81 '. This request has been blocked; the content must be served over HTTPS.

HTTPS доступна только в профессиональных и корпоративных счетов. В бесплатной учетной записи эта функция недоступна. Пожалуйста, прочитайте больше http://openweathermap.org/price

+0

это не моя проблема. вызов api отлично работает для меня на firefox. У меня были проблемы с хром. может быть для вас одинаковым. спасибо, что посмотрели на это в любом случае! – user2317500

Смежные вопросы