Ввод поиска отключается из-за события нажатия клавиш JQuery и в реальном времени - PullRequest
0 голосов
/ 25 февраля 2012

Я не понимаю, почему $ ('# searchbox'). Live не позволяет вводить данные моего поиска. Я могу зарегистрировать событие, но ничего не отображается.Но когда я закомментирую строку окна поиска, она, кажется, вдруг разрешает текст в окне поиска.Плюс функция поиска по лупе работает!Очень странно.

У кого-нибудь была такая проблема?

Я структурировал ее таким образом, потому что хочу, чтобы эта функция использовалась другими моими приложениями.

function initModuleSearch(selector){
    $('#clear_x').live('click', {name:'clear', id:selector}, performSearch);//clears search
    $('#magnify').live('click', {name:'find', id:selector}, performSearch);//submits search
    $('#searchbox').live('keyup', {name:'enter', id:selector}, performSearch);//submits search
    return false;
}

function performSearch(evt){
    var eventType = evt.type;        
    var eventName = evt.data.name;
    var selector = evt.data.id;
    var searchInput = $('#searchbox');

    console.log('Hello:' + eventName)

    //do some search and filter stuff below here

   evt.preventDefault();//disallow browser to perform default action
   return false;
}



initModuleSearch(".module");//init searchbox function

Ответы [ 2 ]

0 голосов
/ 25 февраля 2012

evt.preventDefault(); или даже return false не позволит вам вводить что-либо в текстовое поле.

Если вы считаете, что это не требуется, удалите его из метода.

0 голосов
/ 25 февраля 2012

Вы перехватываете событие keyup, вызываете функцию executeSearch и пропускаете событие, и в рамках этой функции вы затем вызываете .preventDefault() для этого события, которое, как я считаю, предотвратит регистрацию нажатия клавиши на входе. 1002 *

Возможно, вы могли бы попробовать что-то вроде:

if (eventType !== "keyup")
   evt.preventDefault();

Таким образом, нажатия на другие элементы будут предотвращены, но вы все равно сможете вводить данные поиска.

Пояснение:

Ваши три начальных слушателя событий, которые вы добавляете:

$('#clear_x').live('click', {name:'clear', id:selector}, performSearch);//clears search
$('#magnify').live('click', {name:'find', id:selector}, performSearch);//submits search
$('#searchbox').live('keyup', {name:'enter', id:selector}, performSearch);//submits search

Все вызывают одну и ту же функцию performSearch. Внутри этой функции вы берете событие, которое вы только что перехватили evt (в случае с окном поиска, которое является событием keyup), а затем вызываете для него метод .preventDefault () evt.preventDefault(), который сообщает браузер отбрасывает свое поведение по умолчанию для этого события keyup, которое обычно состоит в добавлении символа клавиши, которую вы только что нажали, в поле ввода. Когда вы говорите evt.preventDefault(), вы говорите браузеру: «Не делайте этого, позвольте мне вместо этого делать некоторые другие пользовательские вещи ...», поэтому браузер не будет добавлять это нажатие клавиши в поле ввода.

Ты со мной?

...