2012-04-07 5 views
0

in meinen Schienen 3 Anwendung aufgerufen wird, gibt es ein select_tag mit einer Onchange Veranstaltung, die einen Ajax-Request sendet:js.erb nur auf erstes Mal

f.select 'forma_id', @collection, {:include_blank => true}, {:onchange => "goAjax('/lancamentos/receber_forma', this.value)", :class => 'btn'} 

wo goAjax ist :

function goAjax(_url, _value) { 
    $.ajax({url: _url, data: 'value=' + _value, dataType: 'script'}) 
} 

lancamentos_controller # receber_forma ist (vereinfachte Version):

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 

und receber_forma.js.erb:

$('div#cartoes').replaceWith("<%= escape_javascript(label_tag(@lancamento.forma_id)) %>"); 

, was passiert ist, dass wenn ich einen Wert an diesem wählen wählen, wird der Wert auf dem Etikett wiedergegeben ist immer der Wert gesendet auf erster Aufruf. Die folgenden Wertänderungen ändern den Beschriftungstext einfach nicht. Der Logger in der Methode recent_forma zeigt, dass der neue ausgewählte Wert immer gesendet wird.

Jemand weiß, was ich hier falsch mache ??

p.s.:sorry Fehler der englischen

Antwort

1

Sie völlig Ihr div#cartoes mit einem Etikett, so zweiten Mal ersetzt der Code ausgeführt wird, kann es keine div mit der cartoes-ID finden. Sie wollen wahrscheinlich .html statt .replaceWith verwenden, so dass das Etikett den Inhalt der div wird, anstatt sie ganz zu ersetzen:

$('div#cartoes').html("<%= escape_javascript(label_tag(@lancamento.forma_id)) %>"); 
+0

Dank Dylan ... lösten das Problem !!! – thaleshcv