0

在我的 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 方法中的记录器显示始终发送新选择的值。

有人知道我在这里做错了什么吗?

ps:如有英文错误请见谅

4

1 回答 1

1

你完全用div#cartoes标签替换了你的,所以代码第二次运行时,它找不到div带有cartoesid 的 a。您可能想要使用.html而不是.replaceWith,以便标签成为的内容,div而不是完全替换它:

$('div#cartoes').html("<%= escape_javascript(label_tag(@lancamento.forma_id)) %>");
于 2012-04-07T21:05:41.917 回答