weixin_42362795 2010-04-09 21:12
浏览 170
已采纳

ajax更新后的元素为什么只能显示,不能POST提交

做了二级联动的选择,在页面能够正常选择,但是commit后只有开始显示的值可以被提交,用ajax更新后的变量就在POST参数中没有了?
哪里有问题啊?

[code="ruby"]
<%= javascript_include_tag "prototype" %>

<% form_for(:test,:act,:url=>{:action=>'done‘}) do |x| %>
<%= select(:id,:name, @names,{},{"onchange"=>remote_function(:with=>"'id='+value",
:update=>'number',:url=>{:action=>:get_number} ) } %>

<%= render :partial =>'get_number' %>

<%= submit_tag %>
<% end %>
[/code]

_get_number.erb
[code="ruby"]
<%= select(:id,:number,@numbers) %>
[/code]

在server的log上看到当页面出来后如果不动name的select,直接commit的话在POST的parameters可以发现{"id"=>{"number"=>"value"}}。

如果改变name的select, 那number的select的内容会通过ajax按照想要的变化,但是commit后在POST的parameters中就没有"id"=>"number"的变量了。与上一种情况相比少了一个变量。导致后继操作判断错误。
请教一下是哪里有问题啊?

  • 写回答

1条回答 默认 最新

  • hedahai119 2010-04-22 12:01
    关注

    建议不要用rails提供的 js helper 依赖性强 不好维护

    用jQuery 或 Prototype 自己写联动 也不是很难, 而且过程全透明 好维护

    [code="ruby"]



    Product:


    <%= select_tag 'p', options_for_select(@project_names) %>




    Component:



    <%= select_tag 'component', options_for_select(@component) %>


    [/code]
    [code="js"]
    [12:03:41] linux: $(function(){
    $('#p').change(function(){
    $('#next_select_component').html("");
    $('#next_select_version').html("");
    $.getJSON(
    '/bugzilla/select_with_ajax',
    {product_name:$('#p').val()},
    function(data){
    var components = data["component"];
    $.each(components,function(i){
    $(""+components[i]+"").appendTo($('#component'));
    });
    });
    });
    });
    [/code]
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 咨询一下有关于王者荣耀赢藏战绩
  • ¥100 求购一套带接口实现实习自动签到打卡
  • ¥50 MacOS 使用虚拟机安装k8s
  • ¥500 亚马逊 COOKIE我如何才能实现 登录一个亚马逊账户 下发新 COOKIE ..我使用下发新COOKIE 导入ADS 指纹浏览器登录,我把账户密码 修改过后,原来下发新COOKIE 不会失效的方式
  • ¥20 玩游戏gpu和cpu利用率特别低,玩游戏卡顿
  • ¥25 oracle中的正则匹配
  • ¥15 关于#vscode#的问题:把软件卸载不会再出现蓝屏
  • ¥15 vimplus出现的错误
  • ¥15 usb无线网卡转typec口
  • ¥30 怎么使用AVL fire ESE软件自带的优化模式来优化设计Soot和NOx?