2010-01-24 4 views
8

Gibt es ein Äquivalent zur Rails/Prototype-Methode object_field mit jQuery ohne jRails?Rails observe_field mit jQuery

Ich mache einen Suche-as-you-type mit will_paginate:

 

<%= observe_field('search', 
        :frequency => 2, 
        :update => 'results', 
        :loading => "Element.show('spinner')", 
        :complete => "Element.hide('spinner')", 
        :url => { :controller => 'foo', :action => 'search' }, 
        :with => "'search=' + escape(value)") %> 

Antwort

10

Mit jQuery, müssen Sie einen Selektor verwenden, sollte so etwas wie dies funktioniert

$("#search").bind("blur", function() { 
    $("#spinner").show(); // show the spinner 
    var form = $(this).parents("form"); // grab the form wrapping the search bar. 
    var url = form.attr("action"); // grab the URL from the form's action value. 
    var formData = form.serialize(); // grab the data in the form 
    $.get(url, formData, function(html) { // perform an AJAX get, the trailing function is what happens on successful get. 
    $("#spinner").hide(); // hide the spinner 
    $("#results").html(html); // replace the "results" div with the result of action taken 
    }); 
}); 

Antwort auf Kommentar

Wenn Sie auf keyup reagieren möchten, ersetzen Sie die erste Zeile durch

$("#search").bind("keyup", // etc... 
+0

Danke, aber das sieht aus wie es funktioniert nur, wenn das Suchfeld den Fokus verliert. Ich bin auf der Suche nach einer Suchfunktion. –

+0

@Mark Richman in Post geändert –

+0

Ist es möglich, eine "Verzögerung" hinzuzufügen, so dass es nicht nach jeder Tastenbelegung aufruft, sondern stattdessen wartet, bis der Benutzer für ein paar hundert Millisekunden pausiert? –