2011-02-03 5 views
4

jQueryオートコンプリートプラグインを使用しています。jQueryオートコンプリート:リターンを押すとフォームが送信されます

// 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> 

これが正常に動作します。しかし、オートコンプリートの結果から項目を選択するために「入力」を押すと、フォームが送信されます。なぜこれが起こっているのでしょうか?

私は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

preventDefault()コードに到達する前に別のjavascriptエラーが発生している可能性があります。 Firebugはエラーを表示しますか? –

+0

falseはfalseを返します。 – Luke

+0

そのページにはいくつの書式がありますか? –

答えて

0

あなたがform.submitのイベントハンドラフックで入るの提出を無効にする必要があります:$(「フォーム」)を提出する(関数(){falseを返す を、 });

+0

しかし、私は常にフォームの送信を無効にしたくありません。ユーザーがオートコンプリートの結果で「リターン」を押すと無効にしたいだけです。 –

1

私はオートコンプリート要素にkeypressイベントを追加し、そこからfalseを返すことをお勧めします。後でフォームの残りの部分を提出するあなたの能力には影響しません。

関連する問題