2013-02-27 2 views
0

У меня есть функция поиска, которая использует метод .keyup в приложении rails. Я знаю, что вызов работает, потому что первая буква I типа выполняет поиск и показывает результаты. Если я продолжаю вводить его, он не будет продолжать поиск метода. Вот мой jquery ниже, и часть моих рельсов видит, что он звонит.ajax. Search функция поиска

JQuery

$("input#search").keyup(function(){ 
    $.get($("#verified_search").attr("action"), $("#verified_search").serialize(), null, "script"); 
    return false; 
}); 

index.js.erb

$(".results").html("<%= escape_javascript(render("search")) %>"); 

index.html.erb вид

<%= form_tag admin_view_index_path, :method => 'get', :id => 'verified_search' do %> 
      <%= text_field_tag :search, params[:search] %> 
      <%= submit_tag "Search", :name => :nil %> 
<% end %> 

<%= render 'search' %> 
+0

Если продолжить ввод ли новый запрос отправляется на сервер? –

+0

Одна вещь, которую вам нужно сделать, это «прервать» предыдущий поиск перед отправкой нового запроса, если требуется –

+0

Есть запросы, которые отправляются, но нет информации. В моем первоначальном поиске мое первое письмо - «j». Это дает мне параметры: {"search =>" j "," _ "=>" 1361982841588 "}. В следующих типах букв он обновляет мой сервер, но не имеет информации в параметрах. Похоже, что Параметры: {" _ "= .> "1361982850183"} –

ответ

0

Использование .live()

$("input#search").live('keyup', function(){ 
    $.get($("#verified_search").attr("action"), $("#verified_search").serialize(), null, "script"); 
    return false; 
}); 

При замене содержания $('.results') в index.js.erb, любые слушатели, связанные с этими элементами исчезли.

http://api.jquery.com/live/

Edit: Как говорится в ссылке, метод .live() нежелателен из JQuery 1.7. Используйте .on() для присоединения обработчиков событий. Пользователи более старых версий jQuery должны использовать .delegate(), предпочитая .live().

+0

Даже с функцией .live после ввода моего первого письма он выполняет поиск, но не продолжает обновлять контент. На самом деле более подробное описание - после того, как я напечатаю свою первую букву, скажем «J». Это дает мне результаты, если я набираю далее, то есть «ja», он очищает мой поиск и загружает исходную страницу и останавливает поиск. –

+0

Я также использовал событие .on() и «отправить». Он позволяет только один поиск. Я верю, что он идет где-то в том, что загружается. Когда я это сделаю.on ("submit", ....) он выполняет функцию ajax один раз, а затем, когда я набираю, чтобы искать другое имя, он ничего не будет искать. –

0

Попробуйте

$(document).on("keyup", "#verified_search", function(){ 
     $.get($("#verified_search").attr("action"), $("#verified_search").serialize(), null, "script"); 
     return false; 
    }); 
Смежные вопросы