在我的rails 3应用程序中,有一个带有 onchange 事件的 select_tag ,该事件会发送一个ajax请求:
f.select 'forma_id', @collection, {:include_blank => true}, {:onchange => "goAjax('/lancamentos/receber_forma', this.value)", :class => 'btn'}
其中, goAjax 是:
function goAjax(_url, _value) {
$.ajax({url: _url, data: 'value=' + _value, dataType: 'script'})
}
lancamentos_controller #receber_forma 是(简化版):
def receber_forma
@lancamento = Lancamento.new(:forma_id => params[:value])
logger.info 'forma_id = ' + @lancamento.forma_id
respond_to do |format|
format.html { render :new }
format.js
end
end
和 receber_forma.js.erb :
$('div#cartoes').replaceWith("<%= escape_javascript(label_tag(@lancamento.forma_id)) %>");
正在发生的事情是,当我在该选择上选择一个值时,标签上呈现的值始终是第一次调用时发送的值。以下值更改只是不更改标签文本。方法receber_forma中的记录器显示始终发送新的选定值。
有人知道我在这里做错了吗?
。:接受任何英语错误
答案 0 :(得分:1)
您已完全使用标签替换div#cartoes
,因此代码第二次运行时,找不到div
ID cartoes
。您可能希望使用.html
代替.replaceWith
,以便标签成为div
的内容,而不是完全替换它:
$('div#cartoes').html("<%= escape_javascript(label_tag(@lancamento.forma_id)) %>");