2012-12-19 13 views
6

W ruby ​​na szynach, próbuję zaktualizować 2 częściowe.Po odpowiedzi z fragmentem renderowania, który ma zdarzenia nie działa

show.html.erb:

<div id="filters"><%= render :partial => "pricelistfilters" %></div> 

pricelistfilters.html.erb:

<% @properties.each do |prop| %> 
    #Render the page on properties (and the newproperties) 
    #<select ...><option>...</option><option>...</option> 
    #</select> 
<% end %> 

products.js -> imprezy dla świadczonych częściowego

$(window).ready(function(){ 
    selectionchanges(); 
}); 
function selectionchanges(){ 
    $('#filters select').change(function(){ 
    //Doing stuff to send with ajax 

    //Ajax: 
    $.ajax({ 
     url: document.URL, 
     type: 'POST', 
     data: params 
    }); 
    }); 
} 

products_controller.rb -> kod do przetwarzania zmiany dokonane

def show 
    #Changing the properties (and the pricelist properties) 
    @properties #is filled 
    @newproperties #is filled 
    respond_to do |format| 
    format.html 
    format.js 
    end 
end 

show.js.erb

$('#filters').html('<%= escape_javascript(render :partial => "pricelistfilters") %>'); 
selectionChanges(); 

Moja świadczonych element jest doskonale dobry. Jednakże, kiedy mam poprawną odpowiedź z renderowanym elementem, to po prostu nie wysyła już ajax. Tak więc wydarzenie na wybranych elementach zniknęło, a jestem pewien, że zresetowałem je za pomocą "selectionchanges();" na końcu mojego pliku show.js.erb?

Czy ktoś może znaleźć rozwiązanie tego problemu?

Pozdrawiam i dzięki z góry

+0

Bloki kodu zachowywały się dziwnie: dzięki @jdl za pomoc! – ReBa

+0

Nie ma za co. Mam nadzieję, że znajdziesz dobrą odpowiedź na swój problem. – jdl

+3

masz "zmiany selekcji" ORAZ "selectionChanges", czy to literówka? – RadBrad

Odpowiedz

2

Spróbuj użyć funkcji jQuery żyje na product.js, jak mieszka:

$(window).ready(function(){ 
    selectionchanges(); 
}); 
function selectionchanges(){ 
    $('#filters select').live('change', function(){ 
    //Doing stuff to send with ajax 

    //Ajax: 
    $.ajax({ 
     url: document.URL, 
     type: 'POST', 
     data: params 
    }); 
    }); 
} 

Zasadniczo masz zastępującego elementu HTML DOM, że najpierw związali wydarzenie "zmień" na. Z live, nawet przez zamianę elementu, jQuery ponownie wykona wiązanie dla ciebie.

Mam nadzieję, że pomoże!

+0

Powinien wyglądać ten jeden. Działa idealnie! Dzięki stary. – ReBa

Powiązane problemy