2017-10-31 4 views
0

問題は、温度ボタンが地元の天気の摂氏と華氏を切り替えるように見えるという問題です。私はコンテナの上と下でクリックできる他の都市でこれを行うことができるようにしたいと思います。私はこれをドバイ天気で実装しようとしましたが、これを試してみましたが、温度値やテキストに変化がなく、Cが大文字になるという奇妙な結果が得られます。誰でもこの作業を手助けできますか?これがソートされているので、私は他の都市にも適用します。私は下にCodepenを提供しているだけでなく、私のコードのいくつかは、この作業を試みるために使用されています。クリックすると異なる都市の摂氏と華氏を切り替えようとしています

function toggleTemp(lat, lon) { 
    var weatherAPI = 
    "https://fcc-weather-api.glitch.me/api/current?lat=" + lat + "&lon=" + lon; 

$.getJSON(weatherAPI, function(data) { 
    $(".temp-slider").on("click", function() { 
    var tempC = data.main.temp; 
    var tempF = tempC * 9/5 + 32; 

    if (toggleF) { 
     $("#weather-degrees").html(Math.round(tempF) + "°F"); 
     $("#temp-slider-text").html("Fahrenheit"); 
     toggleF = false; 
    } else if (toggleF == false) { 
     $("#weather-degrees").html(Math.round(tempC) + "°C"); 
     $("#temp-slider-text").html("Celsius"); 
     toggleF = true; 
    } 
    }); 
}); 

}

https://codepen.io/KUBIX90/pen/NwWvNb

答えて

0

最初のドバイをクリックした後、あなたのcodepen作品(主に)ですべて。

この機能ではvar toggleF = true;toggleTemp(25.2, 55.27);ですが、それ以外の点では違いがありますので、その点が異なります。

しかし、var toggleF = trueを実行すると、グローバル変数とローカル変数が衝突します。代わりにtoggleF = !toggleFのようなものが必要ですが、toggleFがまたtoggleTemp()で変更されているので、それを削除するだけです。

また、toggleTemp関数では、度数タイプを切り替えるたびにfcc-weather-api.glitch.me/api/currentが新たに呼び出されます。ユーザーがhttp要求よりも速くこのボタンをクリックすると、エラーが発生する可能性があります。変数に温度を保持し、ユーザーが別の場所を選択した場合にのみ、APIに新しい要求を行うことをお勧めします。それはあなたの学位タイプの表示の変更を完全にクライアント側にすることができます。

$.getJSON(weatherAPI, function(data) { 
    $(".slider").on("click", function() { 

のみドバイで呼び出されtoggleTemp()関数内(です:

私はスライダーはあなたがドバイをクリックした後まで動作しない理由は、あなたが開始するブロックを持っているということだと思いますボタンのクリックイベント)。したがって、少なくとも1回はトグル機能が実行されるまで、.sliderクラスオブジェクトのクリックには関連付けられません。悪いことに、ドバイをクリックするたびに、再度呼び出すと、ワンクリックでその中のコードを二重に実行するという奇妙な動作が発生します。

TL; DRは、次のようにします。

  • すぐにページが用意されると、自身の上ご.slider").on("click"関数を定義します。
  • 唯一のことは、反転toggleFとGUIを更新することです。
  • ユーザーが場所を切り替えたときにのみ、apiから温度を取得して保存します。
+0

こんにちは、あなたの助けをありがとう、私は完全に理解しているか分からない。私はAPI呼び出しと$ getJSONメソッドを前もって取り出すことを試みましたが、どこに置いてもエラーが発生するので、それらを保持しました。トグルは理想的ではありませんが、これを解決する方法はわかりません。私はまた、グローバルGUIで正確に更新する必要があるのは、2番目の箇条書きポイントも理解していませんか? – KUBIX

+0

GUIを更新すると、ユーザーが何を更新するかを更新するタグテキストを変更しているところで、 '$("#weather-degrees ")のようなものを意味しますhtml(Math.round(tempF)+" ° F "見る。 コード/エラーが$ getJSONメソッドを動かすのを見る必要がありますが、コードに構造的な問題があるため、ブロックを別のスコープにドラッグするだけではありません。 これを行うには1つの方法があります:https://codepen.io/anon/pen/BmoYNo – TheAtomicOption

+0

この例をお寄せいただき、ありがとうございます。あなたのソリューションは非常に有用であり、私は知識の私の現在のレベルを与えられたことから、それから何かを学ぶことができます。私はデータを変数としてグローバルに設定してそこから作業できるとは思わなかった、ありがとう! – KUBIX

関連する問題