在边栏中动态选择项目

Selecting item dynamically in rails

本文关键字:选择 项目 动态      更新时间:2023-09-26

我正在尝试使用rails和jquery在这里进行动态选择。 代码如下

<div class = "line_items">  
<%- calc = Hash[Item.all.map{|p| [p.id, p.quantity]}].to_json %>
<div class = "item"><%= f.collection_select :item_id,Item.all,:id,:title, :prompt => "Select a Item", input_html: {data:{calc: calc} %></div>
   <div class ="quantity"> <%= f.text_field :quantity %></div>
/*rest  of code*/
</div>

视图的JavaScript如下

jQuery(document).ready(function(){
    jQuery('.item').bind('change',function() {
    var selectElement = jQuery(this);
    var  itemSelected = jQuery('.item:selected').val();
    var wrapperDivElement = selectElement.parent(".line_items");
    var quantity= eval(selectElement.data("calc"))[itemSelected];
    jQuery(".quantity", wrapperDivElement).val(quantity);
  });
});

当我更改项目时,出现以下错误 eval(selectElement.data("calc"))[itemSelected] is undefined在萤火虫中。谁能指出我哪里出错了?还有更好的方法来获取数量。我觉得我正在做的方法很粗糙。任何指导都会有所帮助。提前谢谢。

jQuery(document).ready(function(){
    jQuery('.item select').bind('change',function() {
    var selectElement = jQuery(this);
    var  itemSelected = selectElement.val();
    var wrapperDivElement = selectElement.parents(".line_items");
    var quantity= eval(selectElement.data("calc"))[itemSelected];
    jQuery(".quantity input", wrapperDivElement).val(quantity);
  });
});

我猜没有检测到itemSelected的值,因此出现了错误。 上面重新定义的代码应该可以工作。但我强烈建议你不要获得这样的数据。最好执行 JSON 调用或 Ajax 调用以从控制器获取相关数据。并在代码中使用parents而不是parent:)

Ik 认为您混淆了按索引引用和按 ID 引用。我不是 Javascript 向导,但你用 .然后,您可以在更改事件中获得"val"值。它包含一个整数,但这不是索引。

然后你在 Javascript 中请求带有索引 val 的项目,而不是值为 val 的项目。也许javascript无法区分它们,因为两者都需要一个Int...

是这一行:

var quantity= eval(selectElement.data("calc"))[itemSelected];