我正在我的网站上实施自动填充功能。但是,我不喜欢你如何“点击”这个建议,让它进入表单字段。
我希望灰色文字能够显示搜索字词的其余部分,就像Google一样。如果用户点击标签,则显示该搜索词,用户可以点击输入。
答案 0 :(得分:1)
这是我的解决方案。代码编写得很快,应该仅作为示例。
<强> HTML:强>
<div id="inp">
<input type="text" id="search" value="" />
<span id="ending" style="color: gray" ></span>
</div>
<强> JS:强>
$( "#search" ).autocomplete({
source: availableTags,
//catch open event
open: function(event, ui) {
//get first item in opened list
var firstInList = $(".ui-autocomplete").children('li').children('a').html();
//find the difference and assign to span
$('#ending').html(firstInList.substring(this.value.length))
}
});
$('#search').keypress(function(e){
var keyCode = e.keyCode || e.which;
//if Tab
if (keyCode == 9) {
e.preventDefault();
//get first item in list and assign to input
$(this).val($(".ui-autocomplete").children('li').children('a').html());
$(".ui-autocomplete").hide();
$('#ending').empty();
}
//input width
this.style.width = ((this.value.length + 1) * 6) + 4 + 'px';
});
答案 1 :(得分:0)
通过使用contenteditable
div
而不是input
,输入字段将立即调整大小,而没有事件处理程序引起的延迟。然后,只需在div的末尾放置一个span
并附上建议的文字即可。
此外,与简单的实现相比,jQuery的自动完成处理程序似乎很慢。这样可以得到以下非常平滑的结果:
不使用input
字段有一些明显的利弊:
专业人士
缺点
对我来说,零延迟要比那些弊端更为重要。
请注意,有许多我没有适当照顾的事情:如果用户以某种方式设法将注意力集中在建议的文本内或之后怎么办? (例如,通过在其下方略微单击)。如果用户从输入文本开始选择并以建议的文本结尾进行选择,该怎么办?它变得非常复杂。我认为这就是为什么这种自动完成的灰色文本很少看到的原因。