我正在尝试使用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 :)

10-06 11:34