首页 > 解决方案 > 在输入字段中输入时,以太坊到美元/其他货币

问题描述

我不太擅长 JS,我一直在与这段代码作斗争,当我在输入字段中键入值时,它应该让我将以太坊转换为选定的货币,它什么也不做,当我调试它时,它似乎一直返回 NaN错误:

The specified value "NaN" is not a valid number. The value must match to the following regular expression: -?(\d+|\d+\.\d+|\.\d+)([eE][-+]?\d+)?

以下是我的代码,非常感谢您的帮助。

代码

 $(".currencyField").keyup(function(){ //input[name='calc']
 let convFrom;
 if($(this).prop("name") == "eth") {
       convFrom = "eth";
       convTo = "usd";
 }
 else {
       convFrom = "usd";
       convTo = "eth";
 }
 $.getJSON( "https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&ids=ethereum", 
    function( data) {
    var origAmount = parseFloat($("input[name='" + convFrom + "']").val());        
    var exchangeRate = parseInt(data.current_price);
    let amount;
    if(convFrom == "eth")
       amount = parseFloat(origAmount * exchangeRate);
    else
       amount = parseFloat(origAmount/ exchangeRate); 
    $("input[name='" + convTo + "']").val(amount.toFixed(2));
    price.innerHTML = amount
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="number" name="eth" class="currencyField" placeholder="ETH">
      <div class="arrow" style="margin: 0 10px";>=</div>
      <input type="number" name="usd" class="currencyField" placeholder="USD">
    </div><span id="price"></span>

标签: javascriptjquery

解决方案


如果您查看 api 的响应,它看起来像返回一个数组。所以要访问current_price你需要引用数组的索引:

var exchangeRate = parseInt(data[0].current_price);

完整代码如下:

 $(".currencyField").keyup(function(){ //input[name='calc']
 let convFrom;
 if($(this).prop("name") == "eth") {
       convFrom = "eth";
       convTo = "usd";
 }
 else {
       convFrom = "usd";
       convTo = "eth";
 }
 $.getJSON( "https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&ids=ethereum", 
    function( data) {
    var origAmount = parseFloat($("input[name='" + convFrom + "']").val());        
    var exchangeRate = parseInt(data[0].current_price);
    let amount;
    if(convFrom == "eth")
       amount = parseFloat(origAmount * exchangeRate);
    else
       amount = parseFloat(origAmount/ exchangeRate); 
    $("input[name='" + convTo + "']").val(amount.toFixed(2));
    price.innerHTML = amount
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="number" name="eth" class="currencyField" placeholder="ETH">
      <div class="arrow" style="margin: 0 10px";>=</div>
      <input type="number" name="usd" class="currencyField" placeholder="USD">
    </div><span id="price"></span>


推荐阅读