我正在使用jQuery Tokeninput插件显示通过jsonp传送的音乐艺术家名称的自动完整列表。
这一切都运行正常,但是我需要在页面上的固定页脚中输入,这意味着当然,下拉列表本身会从页面底部开始。
我想反转这种行为并将下拉列表放在输入元素的“上方”,但我似乎无法找到实现此目的的方法。
有什么想法吗?
答案 0 :(得分:1)
我修改了show_dropdown函数以自动确定它是否应显示在上方或下方:
function show_dropdown() {
if (input_box.is(':focus')) {
var windowHeight = $(window).height();
var docViewTop = $(window).scrollTop();
var dropdownPosition = $(token_list).offset().top + $(token_list).outerHeight();
var availableSpace = windowHeight - (dropdownPosition - docViewTop)
var borderWidth = parseInt(dropdown.css('border-bottom-width'));
if (availableSpace >= (settings.maxHeight + 2 * borderWidth)) {
dropdown.css('bottom', '');
$('body').css('position', '');
dropdown.css({
'border-top-width': 0,
left: $(token_list).offset().left,
top: $(token_list).offset().top + $(token_list).outerHeight()
});
} else {
dropdown.css('top', '');
var bodyHeight = $('body').outerHeight();
var bodyTop = $('body').offset().top;
var bottom;
if ((bodyHeight + bodyTop) < dropdownPosition) {
bottom = dropdownPosition - (bodyTop + bodyHeight) ;
}
else {
bottom = (bodyTop + bodyHeight) - ($(token_list).offset().top + borderWidth);
}
dropdown.css({
'border-top-width': borderWidth,
'border-top-color': dropdown.css('border-bottom-color'),
'border-top-style': dropdown.css('border-bottom-style'),
'bottom': bottom,
'left': $(token_list).offset().left - parseInt($('body').css('margin-left')),
'position': 'absolute'
});
$('body').css({
'position': 'relative'
});
}
dropdown.css({
maxHeight: settings.maxHeight,
overflow: 'auto',
zIndex: settings.zIndex
}).show();
}
}
我还在tokenInput中添加了maxHeight
属性,并使用它来检查空间并设置下拉列表的大小。
在这里试试:http://jsfiddle.net/colin_young/dvuHD/19/(请注意,我的版本对库存版本进行了一些重大修改,我只是没有机会为它们创建拉取请求。)
不会尝试确保上面有空间。假设如果下方没有空间而且上面没有空间,那么你可以做很多事情,尽管以输入元素为中心可能是一个很好的折衷方案。
答案 1 :(得分:0)
我认为您必须在 jquery.tokeninput.js 文件中更改 show_dropdown()函数中的代码:
function show_dropdown() {
dropdown
.css({
position: "absolute",
top: $(token_list).offset().top + $(token_list).outerHeight(),
left: $(token_list).offset().left,
zindex: 999
})
.show();
}
只需正确调整“顶部”广告“左”参数即可。