如何将隐藏的输入传递给JavaScript
我对rails和javascript非常陌生。我有一个如下所示的表,我试图将项目id和所选类别传递给一个ajax调用,该调用将更新item.id的类别 问题是我似乎无法将正确的it.id传递给ajax调用。它传递的是第一个It.id,而不是我所选行上的那个。我已经有了这个工作,但我做了很多清理其他代码,它不再工作。我想我只是第一次做了一些幸运的事情,而不知道怎么做如何将隐藏的输入传递给JavaScript,javascript,ruby-on-rails,ajax,Javascript,Ruby On Rails,Ajax,我对rails和javascript非常陌生。我有一个如下所示的表,我试图将项目id和所选类别传递给一个ajax调用,该调用将更新item.id的类别 问题是我似乎无法将正确的it.id传递给ajax调用。它传递的是第一个It.id,而不是我所选行上的那个。我已经有了这个工作,但我做了很多清理其他代码,它不再工作。我想我只是第一次做了一些幸运的事情,而不知道怎么做 <table class="table table-hover"> <tbody> <% @itemi
<table class="table table-hover">
<tbody>
<% @itemised.each do |it| %>
<tr>
<td><%= it.date %> </td>
<td><%= it.item %></td>
<td><%= number_to_currency(it.value, :unit => "$") %></td>
<td><form name="myform" action="" method="POST">
<input type="button" name="button" value="Submit" onClick="singleItem(this.form)" >
<select name="list">
<% @array_of_live_categories.each do |cats| %>
<option> <%= cats %> </option>
<% end %>
## <option> <%= it.id %> </option>
</select>
<input type= "hidden" id="id" name="id" value= "<%= it.id %>">
</form>
</td>
我只是加入了,作为证明item.id确实存在的一种方式
下面是源代码的一部分,其中还有很多内容,但从中我可以看出,返回的值看起来是正确的。但是,当运行singleItem函数时,它会传递一个不同的值,即与表中第一个项关联的值
</tr>
</tbody>
<tr>
<td>15/01/2015 </td>
<td>J P & Y P Mahaffy</td>
<td>$1,500.00</td>
<td><form name="myform" action="" method="POST">
<input type="hidden" id="id" name="id" value= "J P & Y P Mahaffy">
<input type="button" name="button" value="Submit" onClick="singleItem(this.form)" >
<select name="list">
<option> bank fees </option>
<option> cash out </option>
<option> vehicle expenses </option>
<option> health </option>
<option> office expenses </option>
<option> income </option>
<option> entertainment </option>
<option> transfer </option>
<option> ird payment </option>
<option> unsorted </option>
<option> regular payment </option>
<option> interest </option>
<option> user a </option>
## <option> J P & Y P Mahaffy </option>
</select>
</form>
</td>
任何帮助都将不胜感激
哈雷也许你应该使用Rails隐藏标签
<%= hidden_field_tag 'itemId', it.id %>
希望这会对您有所帮助。可能您应该使用Rails隐藏标签
<%= hidden_field_tag 'itemId', it.id %>
希望这对你有帮助
我似乎无法通过正确的it.id
这是因为您的选择没有值:
<option>bank fees</option>
#-> should be -> <option value="...">bank fees</option>
上述内容将允许您使用以下内容:
#app/assets/javascripts/application.js
$(document).on("submit", "form#category_form", function(e) {
e.preventDefault();
$id = $(this).data("it-id");
$cat = $(this).find("select#category_select").text();
$.ajax({
type: "POST",
url: '/items/single_categorise',
data: { id: $id, newcat: $cat},
});
}
与主题无关,但您正在做的一个更简单的版本是对选择框使用数据远程选项:
这将只显示一个选择框,从中您希望发送的类别的id将作为params[:category][:id]发送到控制器。很遗憾,它不会发送it.id
我似乎无法通过正确的it.id
这是因为您的选择没有值:
<option>bank fees</option>
#-> should be -> <option value="...">bank fees</option>
上述内容将允许您使用以下内容:
#app/assets/javascripts/application.js
$(document).on("submit", "form#category_form", function(e) {
e.preventDefault();
$id = $(this).data("it-id");
$cat = $(this).find("select#category_select").text();
$.ajax({
type: "POST",
url: '/items/single_categorise',
data: { id: $id, newcat: $cat},
});
}
与主题无关,但您正在做的一个更简单的版本是对选择框使用数据远程选项:
这将只显示一个选择框,从中您希望发送的类别的id将作为params[:category][:id]发送到控制器。不幸的是,它不会发送it.id听起来你的页面上可能有重复的id。你仔细检查过这个了吗?您可以发布呈现标记的副本吗?您的意思是重复的item.id吗?是的,我确定我没有这些。听起来你的页面上可能有重复的ID。你仔细检查过这个了吗?您可以发布呈现标记的副本吗?您的意思是重复的item.id吗?是的,我肯定没有。谢谢你。这一行出现语法错误。好的,我认为只需要将其更改为it id=>it.id。Id现在被传递的很好。我从这个代码中得到了一些奇怪的参数。id是正确的,但是:newcat是所有选项的混合体{id=>Bnz Z3594 Zskyway,newcat=>b\nc\nv\nh\no\ni\ne\nt\ni\nu\nr\ni\nu,controller=>items,action=>single\u categorise}。它似乎是每个类别选项的第一个字母,前面有一个“n”。还有,为什么在代码中包含:first:first?得到一个结果-将JS更改为$cat=$this.find:selected.text;非常感谢你的帮助谢谢你。这一行出现语法错误。好的,我认为只需要将其更改为it id=>it.id。Id现在被传递的很好。我从这个代码中得到了一些奇怪的参数。id是正确的,但是:newcat是所有选项的混合体{id=>Bnz Z3594 Zskyway,newcat=>b\nc\nv\nh\no\ni\ne\nt\ni\nu\nr\ni\nu,controller=>items,action=>single\u categorise}。它似乎是每个类别选项的第一个字母,前面有一个“n”。还有,为什么在代码中包含:first:first?得到一个结果-将JS更改为$cat=$this.find:selected.text;非常感谢你的帮助
<%= collection_select :category, :id, Category.all, :id, :name, {}, {data: { remote: true, url: url_for(controller: :items, action: :single_categorise)}} %>