我已经看过其他一些与此类似的帖子,但没有真正回答这个具体问题。试图在项目中使用开箱即用的jQuery UI自动完成小部件..它在我的输入下定位很好(不像其他帖子问题,它从0,0开始),但是当我上下调整窗口大小时自动建议结果显示,位置没有跟随窗口大小重排的输入框。它停留在它被调用时的位置。如果在输入中键入另一个字母,结果框将在正确位置的输入下跳回,但它不会通过窗口大小更改事件执行此操作? TIA。
JS小提琴示例: http://jsfiddle.net/thomaswicker/m0L86d7m/
JAVASCRIPT:
$('input').autocomplete({
search: function(event, ui) {
$('section .test ul').empty();
},
source: ["something", "something-else"]
}).data('autocomplete')._renderItem = function(ul, item) {
return $('<li/>')
.data('item.autocomplete', item)
.append(item.value)
.appendTo($('section .test ul'));
};
HTML:
<section>
<input id="autocomplete"/>
<div class="test">Output goes here:<br/><ul></ul></div>
</section>
CSS:
section {
width: 400px;
height: 100px;
margin-left: auto;
margin-right: auto;
margin-top: 50px;
}
答案 0 :(得分:0)
设置为自动的边距是问题所在。如果删除这两行
margin-left: auto;
margin-right: auto;
它有效。我认为在真正的页面上你并不需要那些。
答案 1 :(得分:0)
您可以添加窗口大小调整事件监听器,然后调用jQuery UI .position()
method。您可以在suggest()
method in the source code中看到此操作。
在Autocomplete create
event中添加此内容是个不错的地方,因为在小部件创建期间只会调用一次。
它看起来像这样:
$('input').autocomplete({
...
...
create: function(event, ui) {
var widget = $(this).data('ui-autocomplete');
var ul = widget.menu.element;
var positionProps = $.extend({ of: widget.element }, widget.options.position);
// reposition autocomplete dropdown when window resizes
$(window).on('resize', function() {
ul.position(positionProps);
});
},
...
...
});