2011-02-03 3 views
4

Я использую плагин jQuery Autocomplete.jQuery Autocomplete: Hitting return отправляет форму

// I'm not sure if there's a better way to do this 

var base_url = window.location.href.slice(0, window.location.href.indexOf('/bar')); 
$('.foo-widget').find('input:first-child').autocomplete(base_url + "/api/baz?format=newline"); 

Разметка:

<ul class="foo-widget"> 
    <li> 
     <input value="" autocomplete="off" class="ac_input"><input value="" autocomplete="off" class="ac_input"><button>Add</button> 
    </li> 
</ul> 

Это прекрасно работает. Однако, когда я нажимаю «enter», чтобы выбрать элемент из результатов автозаполнения, форма отправляется. Почему это может произойти?

Я посмотрел в jquery.autocomplete.js и увидел, что следующее выполняется:

 case KEY.RETURN: 
      if(selectCurrent()) { 
       // stop default to prevent a form submit, Opera needs special handling 
       event.preventDefault(); 
       blockSubmit = true; 
       return false; 
      } 
      break; 

не event.preventDefault() и blockSubmit = true должны остановить форму от представления? Возможно ли, что JS-код, который у меня есть в другом месте на странице, мешает?

+0

У вас может быть другая ошибка javascript, которая возникает до того, как она попадет в код preventDefault(). Есть ли у Firebug какие-либо ошибки? –

+0

Возврат false блокирует отправку. – Luke

+0

Сколько форм у вас на этой странице? –

ответ

0

Вы должны отключить отправку при вводе, подключив обработчик событий для формы. Get: $ ("form"). Submit (function() { return false; });

+0

Но я не хочу всегда отключать форму submit - я хочу, чтобы она была отключена, когда пользователь нажимает «return» на результаты автозаполнения. –

1

Я бы рекомендовал добавить событие нажатия клавиши в элементе Autocomplete и вернуть false из этого. Это не повлияет на вашу способность отправить остальную часть формы позже.

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