如何在Javascript

时间:2018-01-11 01:41:38

标签: javascript

在我的JS文件中,我有一个名为getRippleVals()的函数,通过url调用JSON文件,此函数在页面加载后每5秒执行一次,此函数由{{1}调用}。我还有一个带有onclick功能的按钮,名为$( document ).ready(function () {})

我想要做的是,当单击按钮时,它会调用changecoin(coin)并传递一个字符串参数来更改它调用的JSON URL。然后,在单击按钮后每次调用getRippleVals()都会使用新的URL。

目前,我已经通过使用名为getRippleVals()的全局变量来实现它,该变量用于查找JSON文件。单击该按钮时,JSONurl的值将更改。但是目前这并没有立即调用JSONurl函数,这意味着我必须等待几秒钟才能在页面更新之前再次调用该函数。

我不确定我应该怎么做,因为我不确定如何将参数传递给getRippleVals()调用的函数

这是我的JS:

$( document ).ready(function () {})

1 个答案:

答案 0 :(得分:0)

为什么不这样做?

document.getElementById("dropdown-btc").addEventListener("click", function(){
    changeCoin("btc");
});

document.getElementById("dropdown-eth").addEventListener("click", function(){
    changeCoin("eth");
});

document.getElementById("dropdown-xrp").addEventListener("click", function(){
    changeCoin("xrp");
});



$( document ).ready(function () {
    console.log( "ready!" );
    var JSONurl = "http://coincap.io/page/XRP"
    //call getRippleVals() and pass the JSONurl, it will execute after 5 sec
    setTimeout(getRippleVals(JSONurl), 5000);
});


function getRippleVals(JSONurl){
    $.getJSON(JSONurl,
              function (data) {

              //... extra function methods are here, not relevant to the problem.


          });
      });
}



function changeCoin(coin){
  console.log(coin);
  var coin = coin.toUpperCase();
  $("#dropdownMenuButton").html(coin);

  if(coin === "BTC")
  {
    JSONurl = "http://coincap.io/page/BTC";
    getRippleVals(JSONurl)
    $("#pairing-text").html("BTC : USD");
    lastPrice = 0;
  }
  else if(coin === "ETH")
  {
    JSONurl = "http://coincap.io/page/ETH";
    getRippleVals(JSONurl)
    $("#pairing-text").html("ETH : USD");
    lastPrice = 0;
  }
  else if(coin === "XRP")
  {
    JSONurl = "http://coincap.io/page/XRP";
    getRippleVals(JSONurl)
    $("#pairing-text").html("XRP : USD");
    lastPrice = 0;
  }

}

您必须等待5秒才能执行getRippleVals(),因为您拨打了setTimeout

中的getRippleVals()

修改

很抱歉以后的回复。至于你的要求,我已经在下面提供了一个示例代码。

var JSONurl = "http://coincap.io/page/XRP";
var counter = 5000;
var timer = null;
$(document).ready(function(){
      getRippleValstimer(); //call the timer so getRippleVals() will execute every 5sec
        //will execute 5 sec after page load
        document.getElementById("dropdown-btc").addEventListener("click", function(){
          changeCoin("btc");
      });

      document.getElementById("dropdown-eth").addEventListener("click", function(){
          changeCoin("eth");
      });

      document.getElementById("dropdown-xrp").addEventListener("click", function(){
          changeCoin("xrp");
      });
});

//the timer function
function getRippleValstimer(){
      timer = setTimeout(function(){
        getRippleValstimer(); getRippleVals();
      },counter);
}

function getRippleVals(){
  //your code here
  console.log(JSONurl);
}


function changeCoin(coin){
  var coin = coin.toUpperCase();
  console.log(coin);
  if(coin === "BTC")
  {
    JSONurl = "http://coincap.io/page/BTC";
    clearTimeout(timer); //clear the timer
    getRippleVals();//call getRippleVals() so it will execute without waiting for 5 seconds
    getRippleValstimer(); //initialize the timer function again

  }
  else if(coin === "ETH")
  {
    JSONurl = "http://coincap.io/page/ETH";
    clearTimeout(timer); //clear the timer
    getRippleVals();//call getRippleVals() so it will execute without waiting for 5 seconds
    getRippleValstimer(); //initialize the timer function again
  }
  else if(coin === "XRP")
  {
    JSONurl = "http://coincap.io/page/XRP";
    clearTimeout(timer); //clear the timer
    getRippleVals();//call getRippleVals() so it will execute without waiting for 5 seconds
    getRippleValstimer(); //initialize the timer function again
  }

}