2012-01-24 2 views
0

Я работаю над проектом rails как разработчиком front-end, и мы используем twitter bootstrap .. Так что у меня есть некоторый поиск модальный, и когда вы вводите что-то, а хиты входят, тогда вызывается ajax и там являются результаты, показанные ниже поле поиска ..Twitter bootstrap modal отправляет двойной запрос ajax

$('#search_term').live("keyup", function(event) { 
if (event.keyCode == '13') { 
doSearch(this); 
} 
}); 

и когда вы нажмете ввести есть 2 Ajax звонки ..

Я установил это, вызывая кубик() перед живой и теперь он посылает только один запрос, как это должно быть ... Но я не понимаю, в чем была проблема ?!

$('#search_term').die("keyup").live("keyup", function(event) { 
if (event.keyCode == '13') { 
doSearch(this); 
} 
}); 

Может ли кто-нибудь объяснить, почему это происходит ?!

+0

Возможно, браузер отправляет '\ r \ n', а bootstrap рассматривает его как два события? –

+0

какой браузер? или все? – nodrog

ответ

0

Если с помощью die() вы исправите проблему, вероятно, вы вызываете живой метод более одного раза.

$('#search_term').on("keyup", function(event) { 
    if (event.keyCode == '13') { 
    console.log("ENTER!") 
    } 
}); 

$('#search_term').on("keyup", function(event) { 
    if (event.keyCode == '13') { 
    console.log("ENTER!") 
    } 
}); 

(Refactored код, потому что .live это устаревшее)

Попробуйте fiddle и откройте консоль разработчика. Если вы нажмете enter внутри входа, он будет вызывать console.log() несколько раз.
В этом примере вы добавляете новые функции в событие keyup, и результат заключается в том, что при срабатывании клавиатуры все функции будут запущены.
Вместо .die (теперь это .off) удаляет предыдущие добавленные функции. Смотрите пример:

$('#search_term').off("keyup").on("keyup", function(event) { 
    if (event.keyCode == '13') { 
    console.log("ENTER!") 
    } 
}); 

$('#search_term').off("keyup").on("keyup", function(event) { 
    if (event.keyCode == '13') { 
    console.log("ENTER!") 
    } 
}); 

Попробуйте теперь этот модифицированный fiddle и видеть, что функция вызывается только один раз.

Смежные вопросы