货币兑换 - 如何从onclick

时间:2016-01-24 06:14:25

标签: javascript jquery html5

堆垛机:我编写了一个外汇计算器(印度卢比兑换美元),增加了印度的crore和10万计数系统。如你所见,它运作良好:[外汇计算器] [1]。

为了改进它,我想找到一种方法让代码结束并获取具有今天汇率的JSON对象,该汇率可通过API在许多地方获得。虽然我可以编写一个获得汇率的函数,但我没有运气获得onclick调用以使其正常工作。

我查看了jQuery页面但找不到答案。如果我使用加载函数,格式为:

$('selector').load('url',callback) {
    do some callback of some kind
};

使用简单的页面,我每次都可以使用它,但是 -

因为我想通过onclick html调用触发最新汇率的调用,我想使用onclick中的函数。我的第一个问题是,我的选择器应该是什么?通常我会通过id或类将它指向innerHTML,但这似乎不适用于此。

其次,似乎我应该设置我的代码,以便在页面加载时,它会熄灭并记下当前的汇率。有没有办法让JavaScript / jQuery在页面加载时执行此操作,即使我还没有调用该函数呢?最好的情况是,我将变量设置为今天的速率并将其保存在本地,因此我只需要每天更新一次。

最后,我将与onclick相关的函数调用设置为:

onclick = run(123.45)   with 123.45 being today's rate.

有没有办法用函数替换123.45,所以函数中的函数?我想使用从jQuery .load方法返回的今天的速率作为填充运行函数调用的参数。无论我如何尝试,我都无法让它发挥作用。我搜索过google并且没有找到任何让我相信我认为这一切都错了的东西。

感谢您的帮助。

// js logic to run calculator with the assumption that each 
// calculation involves some pos or negative number and then 
// an operator (+-/*) which always yields a positive number. 
// ex: 2 + 2 = (4 elements) adding another number and operator 
// ex: / 3.5 is now 6 elements in the array.

arr = [];
var total = 0, rupee;
var box = document.getElementById("display");

// jquery要求当前卢比兑换美元汇率

var url = "https://api.fixer.io/latest?base=USD";

// BELOW IS THE CODE FROM MY FIRST QUESTION
$(**WHATSHOULDTHISSELECTORBE?**).load(url, function(responseTxt) {
   var obj = JSON.parse(responseTxt);
   rupee = obj.rates.INR;
 });

//卢比结束美元通话

function run(digit) {
  x = box.value;
  if (x !== '.' && isNaN(x)) {
    box.value = "";
  }
  box.value += digit;
}

function runPlus() {
  var digits = box.value;
  if (digits === "") {
    return;
  }
  arr.push(Number(digits)); // tried parseInt but dropped decimal nos.

  box.value += "+";
  arr.push("+");
  console.log(arr);
}

function runMinus() {
   var digits = box.value;
  if (digits === '') {
    arr.push("-");
    return;
  }
  arr.push(Number(digits));
  box.value = "";
  box.value = "-";
  arr.push("-");
  console.log(arr);
}

function runMult() {
  var digits = box.value;
  if (digits === "") {
    return;
  }
  arr.push(Number(digits));
  box.value = "";
  box.value += "*";
  arr.push("*");
  console.log(arr);
}

function runDiv() {
  var digits = box.value;
  if (digits === "") {
    return;
  }
  arr.push(Number(digits));
  box.value = "";
  box.value += "/";
  arr.push("/");
  console.log(arr);
}

function runEquals() {
  var digits = box.value;
   if (digits === "") {
    return;
  }
  arr.push(Number(digits));
  arr.push("=");

  box.value = "";
  total = arr[0];
  var ans = calculateArr(arr);
  box.value = ans;
}

  function runClear() {
  box.value = "";
arr = [];
}

function calculateArr(arr) {
  for (var i = 0; i < arr.length; i = i + 2) {

  if (arr[i + 1] === "+") {
   total = total + arr[i + 2];

} else if (arr[i + 1] === "-") {
  total = total - arr[i + 2];

} else if (arr[i + 1] === "*") {
  total = total * arr[i + 2];

} else if (arr[i + 1] === "/") {
  total = total / arr[i + 2];

} else if (arr[i + 1] === "=") {
  total = total;

} else alert("Error");

}
  return ReplaceNumberWithCommas(total);
}

function ReplaceNumberWithCommas(yourNumber) {
  //Seperates the components of the number
  var n = yourNumber.toString().split(".");
  //Comma-fies the first part
  n[0] = n[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  //Combines the two sections
  if (n[1]) {
    n[1] = n[1].split("").slice(0, 2);
    n[1] = n[1].join("");
  }
  return n.join(".");
}




  [1]: http://codepen.io/Qstreet/pen/GovZdg

2 个答案:

答案 0 :(得分:0)

由于您需要在页面加载时自动检索值,因此需要使用xhr请求。

$.get( "your-url", function( data ) {
$( "where you want to insert it" ).html( data );
//or call your-custom-function(data);
});

如果要在click事件中获取值,请将上面的代码作为函数插入到jquery click事件处理程序

答案 1 :(得分:0)

非常感谢@Anmol。我得到了它的工作:

var url = "http://api.fixer.io/latest?base=USD";

function runRup() {
var xhr = new XMLHttpRequest();
xhr.open("GET",url,false);
xhr.send(null);
var rt = JSON.parse(xhr.responseText);
return rt.rates.INR;
};