下面我有一个 ruby every 方法,其中嵌入了一个 onclick 按钮,当单击股票代码时,我试图为投资组合中的每只股票调用 iex 的统计 api,并将其存储在表中已建成。这是 ruby :
<% portfolio.assignments.each_with_index do |a, index|%>
<div class="accordion" id="accordionExample">
<div>
<div id="headingThree">
<h5 class="mb-0">
<button onclick="getStock();" class="btn btn-link collapsed" type="button" data-toggle="collapse" data-target="#collapseThree<%=a.id%>" aria-expanded="false" aria-controls="collapseThree<%=a.id%>">
<li class="list-inline-item"id="<%=a.stock.ticker%>"><%= a.stock.ticker %></li>
部分代码丢失,但我只包含了我认为相关的部分,但是当我运行代码并在浏览器中检查它时,我可以看到存储在数据库中的每个股票代码的所有内容都正确加载,但它只是显示第一个代码的数据返回?
function getStock() {
$('#<%=a.stock.ticker%>').each(function(){
var theURL = `https://api.iextrading.com/1.0/stock/<%=a.stock.ticker%>/stats`;
$.getJSON(theURL, function(data) {
var obj = data;
document.getElementById("symbol").innerHTML = obj.symbol;
});
})
};
这是我的表格的一部分:
<table class="table table-hover text-left">
<tbody>
<tr>
<th>Symbol:</th>
<td id="symbol"></td>
最佳答案
您有 n
个作业,通过 each_with_index
,您将获得 n
个 div
调用 getStock()
n
次。
但实际问题是您的 JavaScript 函数 getStock()
是单个副本,并且不会重复查找循环的每个分配代码。
只需替换以下内容即可,
"getStock();"
与,
"getStock(#{a.stock.ticker});"
并将函数修改为,
function getStock(ticker) {
$(ticker).each(function(){
var theURL = `https://api.iextrading.com/1.0/stock/' + ticker + '/stats`;
$.getJSON(theURL, function(data) {
var obj = data;
document.getElementById("symbol").innerHTML = obj.symbol;
});
})
};
更新 - 如果以上不起作用,您可以尝试this &更新功能。
关于Ruby 中的 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53678864/