автозаполнение jquery. Когда у вас есть автозаполнение и нажмите «Ввод», я не хочу искать, на самом деле он будет выполнять поиск

введите автозаполнение, вы нажимаете клавишу «ввод», я что-то ищу. захватите событие ввода и выполните функцию поиска.

это первая функция: код автозаполнения:

$('input[name=fieldInputName]').autocomplete(names, {
         max: max,    
         minChars: minChars ,   
         width: 149,     
         scrollHeight: 500,   
         matchContains: true,    
         autoFill: false, 
         sortable: true,
         matchSubset :false,
         formatItem: function(row, i, max) {
             return  row[returnSearchkey];
         },
         formatMatch: function(row, i, max) {
             return row[returnSearchkey] ;
         },
         formatResult: function(row) {
            return row[returnSearchkey];
         }
     }).result(function(event, row, formatted) {

     });

это вторая функция: нажмите, введите код, который будет выполнять поиск:

function pressEnter(e){
        e = e || event;
        if (e.keyCode == 13) {
        submitSearch()();
        }
} 

Html ввода:

 <input onkeyup="pressEnter(event);"type='text' name='createdBy' />

Когда вы запускаете автозаполнение и выбираете один элемент, нажимая «ввод», он выполняет автозаполнение и возвращает выбранное значение, но также вызывает вторую функцию «pressEnter (e)». На самом деле я хочу нажать ввод, когда вы запустили автозаполнение, но не выполнили вторую функцию (нажмите Enter).


person tree3170    schedule 22.02.2013    source источник
comment
Я с трудом понимаю, что вы хотите сделать, пожалуйста, удалите ненужные части из кода и поместите две части кода в контекст. Вторая функция не вызывается из примера. Пожалуйста, сделайте короткие предложения, в которых вы описываете отдельные шаги этого примера, например Пользователь вводит символ в поле ввода   -  person pfried    schedule 22.02.2013
comment
Вторая функция:‹input onkeyup=pressEnter(event);type='text' name='createdBy' /› она будет запущена, когда вы нажмете ввод. Но если вы активировали автозаполнение, выберите элемент и нажмите ввод, он будет запустить вторую функцию. На самом деле, я не хочу выполнять вторую функцию.   -  person tree3170    schedule 22.02.2013


Ответы (1)


События в DOM начинаются где-то в вашем дереве, спускаясь к элементу (фаза захвата), а затем они всплывают вверх по DOM (фаза всплытия).

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

В обработчике событий автозаполнения вы должны вызвать stopPropagation() для события. Хотя это работает не во всех браузерах. В IE до IE9 этот метод называется cancelBubble(true).

Чтобы предотвратить поведение браузера по умолчанию, вы можете сделать event.preventDefault()

Вы можете узнать больше об этом, выполнив поиск «Отмена события» или «Распространение события», так как это сложная тема в JavaScript.

person pfried    schedule 22.02.2013