2017-12-11 20 views
0

<a>要素clickイベントでjavascript関数を呼び出す必要があります。ページが最初に読み込まれると、温度は°Cに表示されます。その後、ユーザーは温度をクリックしてページを更新せずに°C to °Fからその逆に変更することができます。手伝ってくれてありがとう..!!<a>要素onclickイベントのJavascript関数を呼び出す

コード:

HTML:

<html> 
<script src="https://use.fontawesome.com/51b73c8fb8.js"></script> 

<body> 
    <div class="mainContainer"> 
    <div class="tempOutCont"> 
     <div class="tempInCont"> 
     <span id="headDetails"></span> 
     <div id="iconTemp"> 
      <img id="icon"></img> 
      <a id="unitLink" href="https://www.google.com"></a> 
     </div> 
     <span id="mainWeather"></span> 
     <span id="detailsHead">Details</span> 
     <div id="listDetails"> 
      <ul> 
      <li>Wind<span id="windText" class="listDetailsItem"></span></li> 
      <li>Pressure<span id="pressureText" class="listDetailsItem"></span></li> 
      <li>Humidity<span id="humidText" class="listDetailsItem"></span></li> 
      <li>Cloudiness<span id="cloudText" class="listDetailsItem"></span></li> 
      </ul> 
      <div> 
      </div> 
     </div> 
     </div> 
</body> 

</html> 

CSS:

html, 
body { 
    height: 100%; 
    width: 100%; 
    margin: 0; 
    padding: 0; 
} 
.mainContainer { 
    background-color: red; 
    height: 100%; 
    width: 100%; 
    display: flex; 
    justify-content: center; 
    align-items: center; 
} 
.tempOutCont { 
    background-color: white; 
    height: 20em; 
    width: 40em; 
    border-radius: 1em; 
    margin-bottom: 10em; 
    display: flex; 
    justify-content: center; 
    align-items: center; 
} 
.tempInCont { 
    background-color: blue; 
    margin: 2em; 
    width: 100%; 
    height: 80%; 
    border-radius: 1em; 
    display: flex; 
    flex-direction: column; 
} 
#headDetails { 
    border: 0.1em white solid; 
    text-align: left; 
    margin-top: 1em; 
} 
#iconTemp { 
    border: 0.1em white solid; 
    display: flex; 
    justify-content: space-around; 
} 
#mainWeather { 
    text-align: center; 
} 
#detailsHead { 
    text-align: center; 
} 
#listDetails { 
    text-align: center; 
} 
li { 
    margin-left: 10em; 
    text-align: left; 
} 
.listDetailsItem { 
    margin-left: 5em; 
    text-align: left; 
} 
a { 
    color: white; 
} 

JS:

/*<iframe src="https://codepen.io/shaan046/full/jaggro/" allow="geolocation"></iframe>*/ 
var appId = "675645ead57721be136750f9cfc0acca"; 
var unit; 
var temperature; 

var changeUnit = function changeUnit(unit, temperature) { 
    console.log(unit); 
    if (unit === "C") { 
    temperature = temperature * 1.8 + 32; 
    unit = "F"; 
    document.getElementById("unitLink").innerHTML = temperature + "°F"; 
    } else if (unit === "F") { 
    temperature = (temperature - 32)/1.8; 
    unit = "C"; 
    document.getElementById("unitLink").innerHTML = temperature + "°C"; 
    } else if (unit === "K") { 
    temperature = temperature - 273.15; 
    unit = "C"; 
    document.getElementById("unitLink").innerHTML = temperature + "°C"; 
    } 
    return false; 
}; 

var getWeatherData = function getWeatherData() { 
    if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(function showPosition(position) { 
     var lat = String(position.coords.latitude); 
     var lon = String(position.coords.longitude); 
     $.ajax({ 
     type: "GET", 
     url: 
      "https://api.openweathermap.org/data/2.5/weather?lat=" + 
      lat + 
      "&lon=" + 
      lon + 
      "&appid=" + 
      appId, 
     success: function(json) { 
      document.getElementById("headDetails").innerHTML = 
      "Weather in " + json.name + "," + json.sys.country; 
      document.getElementById("icon").src = 
      "https://openweathermap.org/img/w/" + json.weather[0].icon + ".png"; 
      changeUnit("K", json.main.temp); 
      document.getElementById("mainWeather").innerHTML = 
      json.weather[0].main; 
      document.getElementById("windText").innerHTML = 
      json.wind.speed + "m/s"; 
      document.getElementById("pressureText").innerHTML = 
      json.main.pressure + "hpa"; 
      document.getElementById("humidText").innerHTML = 
      json.main.humidity + "%"; 
      document.getElementById("cloudText").innerHTML = 
      json.clouds.all + "%"; 
     } 
     }); 
    }); 
    } else { 
    x.innerHTML = "Geolocation is not supported by this browser."; 
    } 
}; 
$(document).ready(function() { 
    getWeatherData(); 
    $("#unitLink").onclick = changeUnit(unit, temperature); 
}); 
+3

を振る舞いを追加することができます

  • のための課題あなたが持っている問題は穏やかですか? – Herohtar

  • +0

    関数コールを使って設定したアンカーテキストであるテキスト17°Cをクリックすると、何も起こりません。関数呼び出しは、温度をケルビン(K)からセルシウス(C)に変換することによって、テキストを正しく設定します。しかしその後は、をクリックしても何も起こりません。 –

    答えて

    1

    jQueryの

    使用してみてください

    $( '#elementToChangeID')。テキスト( "something");

    +0

    答えをありがとう。私の問題は、関数に引数が渡されていることです。その場合、JSからHTMLへの価値をどのように渡すことができますか?私はそうは思わないでしょう。 –

    +1

    HTMLに目立たないようにしてください。これは悪い習慣です。 – DanteTheSmith

    +0

    JSで設定した値でHTML要素を編集しようとしていますか? –

    1

    DOMにイベントをバインドするpropperの方法がある:JSと

    <a href="#" id="someLink">link</a> 
    

    $('#someLink').click(function(){ 
    // do something 
    }); 
    

    はHTMLでonclickを使用していません。

    利点は、プレゼンテーションから(HTML)言語の

  • なし混合を分離さ

    • 行動(Javascriptを)している
    • あなたが最もクロスブラウザを扱うことができるjQueryのようなJavaScriptのフレームワークを使用している
    • もしあなたが何exacコードの重複なしで一度にHTML要素の多くに
  • +0

    私は試しました - $( "#unitLink")クリック(changeUnit(ユニット、温度));私はそれを正しい方法でしていますか?クリックすると何も起こりません。 –

    関連する問題