【发布时间】:2011-09-10 09:04:07
【问题描述】:
我正在使用 Jquery UI 自动完成插件作为一个直接的搜索词建议工具。除了我无法移动结果框外,它可以正常运行。我基本上需要将它向左移动 20 像素,向下移动 4 像素。我试图覆盖 Jquery UI CSS,但无法重新定位框。
非常感谢有此问题经验的人提供任何帮助。
【问题讨论】:
标签: jquery css jquery-ui jquery-plugins autocomplete
我正在使用 Jquery UI 自动完成插件作为一个直接的搜索词建议工具。除了我无法移动结果框外,它可以正常运行。我基本上需要将它向左移动 20 像素,向下移动 4 像素。我试图覆盖 Jquery UI CSS,但无法重新定位框。
非常感谢有此问题经验的人提供任何帮助。
【问题讨论】:
标签: jquery css jquery-ui jquery-plugins autocomplete
这是您可以做到的一种方法,点击open 事件并在该事件发生时更改菜单的位置:
$("#autocomplete").autocomplete({
appendTo: "#results",
open: function() {
var position = $("#results").position(),
left = position.left, top = position.top;
$("#results > ul").css({left: left + 20 + "px",
top: top + 4 + "px" });
}
});
我还使用appendTo 选项来轻松找到包含菜单的ul。不过,您可以在没有此选项的情况下执行此操作。
这是一个工作示例:http://jsfiddle.net/9QmPr/
【讨论】:
<ul> 的大小,使其宽度与<input> 的宽度相同,该怎么办?
$("#results > ul").width($("#results").width());?
appendTo: "#results", open: function(){ var position = $("#results").position(), left = position.left, top = position.top; $("#results > ul").css({left: (left + 15) + "px", top: (top + 30) + "px", width: (206) + "px", float: "left"}); } 我做错了什么吗?我的意思是,在 IE7 上,与其他浏览器不同,我的自动完成结果并不位于我的 #results div 下方。
这可以通过position option,特别是offset property轻松实现:
$('#myField').autocomplete({
source: …,
position: {
offset: '20 4' // Shift 20px to the left, 4px down.
}
});
【讨论】:
类似的方法也可以
open : function(){
$(".ui-autocomplete:visible").css({top:"+=5",left:"-=2"});
},
【讨论】:
使用这个选项似乎更好
appendTo: "#autocomplete_target_wrapper",
menudocking: {
menucorner: "right top",
inputcorner: "right bottom",
collision: "none"
}
官方链接 https://forum.jquery.com/topic/autocomplete-menu-docking-position
【讨论】: