重新定位Jquery UI自动完成结果框

23

我正在使用Jquery UI Autocomplete插件来创建一个简单的搜索词建议工具。 它已经运行良好,除了我无法移动结果框。 我基本上需要将其向左移动20像素并向下移动4像素。 我尝试覆盖Jquery UI CSS,但未能重新定位该框。

希望有经验的人能提供帮助,谢谢。

4个回答

26

下面是一种方法,通过触发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/


当我将这段代码加入到我正在工作的项目中时,我收到了一个“this.menu未定义”的错误。 - JP1971
@JP1971: 除非您发布一些代码,否则我无法帮助您。您可能需要打开另一个问题以获得更好的结果。 - Andrew Whitaker
如果我想调整我的<ul>大小,使其宽度与我的<input>相同怎么办? - Tsukimoto Mitsumasa
你尝试过这个吗:$("#results > ul").width($("#results").width()); - Andrew Whitaker
@AndrewWhitaker,我尝试了你的解决方案,在FF、Chrome和IE8-9上都能正常工作,但在IE7上却不行。这是我做的方式,`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下面,而是其他浏览器上的位置。 - Tsukimoto Mitsumasa

23

这可以通过 position 选项 来轻松实现,具体来说是通过 offset 属性

$('#myField').autocomplete({
    source: …,
    position: {
        offset: '20 4' // Shift 20px to the left, 4px down.
    }
});

英雄!我在入侵开放位置之后找到了这个。 - martinedwards
请务必查看此处 http://api.jqueryui.com/position/ 中提供的所有位置选项设置。 - Ben Gripka

18

这样做也可以起作用

open : function(){
        $(".ui-autocomplete:visible").css({top:"+=5",left:"-=2"});
    },

完美。这在我使用1.12.1时有效,而位置属性无效。 - ron
对我有用。谢谢。 - Prateek

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接