0

私のrails3アプリケーションには、ajaxリクエストを送信するonchangeイベントを含むselect_tagがあります。

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

your をラベルに完全に置き換えているため、コードを 2 回目に実行すると、idを持つdiv#cartoesa が見つかりません。おそらくの代わりにを使用して、ラベルを完全に置き換えるのではなくのコンテンツにすることをお勧めします。divcartoes.html.replaceWithdiv

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