jQueryUI Autocomplete が現在フォーカスされている項目を選択してメニューを閉じるのを防ぐために ENTER を押したときの相互作用を特に防ぎたいです。
次のドキュメントを参照しています: http://api.jqueryui.com/autocomplete/#event-change
jQueryUI Autocomplete が現在フォーカスされている項目を選択してメニューを閉じるのを防ぐために ENTER を押したときの相互作用を特に防ぎたいです。
次のドキュメントを参照しています: http://api.jqueryui.com/autocomplete/#event-change
アップデート:
原理は同じです。代わりにフォームを送信するように関数を変更するだけsetTimeout
です (ここで示されているように: http://jsfiddle.net/X8Ghc/8/ )
アップデート:
あなたは正しいです、$(this)
を参照することになっていましたui-menu
(そして明らかにそうではありませんでした)。新しいフィドルhttp://jsfiddle.net/X8Ghc/7/は、かなりうまく機能します。
$(document).ready(function() {
$("#autocomplete").autocomplete({
"open": function(e, ui) {
//using the 'open' event to capture the originally typed text
var self = $(this),
val = self.val();
//saving original search term in 'data'.
self.data('searchTerm', val);
},
"select": function(e, ui) {
var self = $(this),
keyPressed = e.keyCode,
keyWasEnter = e.keyCode === 13,
useSelection = true,
val = self.data('searchTerm');
if (keyPressed) {
if (keyWasEnter) {
useSelection = false;
e.preventDefault();
window.setTimeout(function() {
//since there is apparently no way to prevent this
//contemptible menu from closing, re-open the menu
//using the original search term after this handler
//finishes executing (using 'setTimeout' with a delay
//of 0 milliseconds).
self.val(val);
self.autocomplete('search', val);
}, 0);
}
}
return useSelection;
},
"source": ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"]
});
});
オリジナル:
これはフィドルで機能します:
$(document).ready(function() {
$("#autocomplete").autocomplete({
"select": function(e, ui) {
var keyPressed = e.keyCode,
keyWasEnter = e.keyCode === 13,
useSelection = true;
console.log(e);
if (keyPressed) {
if (keyWasEnter) {
useSelection = false;
$(this).open(e, ui);
}
}
return useSelection;
},
"source": ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"]
});
});