在HTML里面用JS+DOM做一个类似于百度搜索框<比如在输入框随便写一个字符、他会自动弹出一个下拉列表、就相当于词汇联想>
本人初学者、求高手指教!
本人初学者、求高手指教!
解决方案 »
- extjs 窗口显示问题
- 【初学者提问】,非常基础的问题。
- 把js代码放到单独的文件的安全和效率问题
- 求修改一段js代码
- innerHTML问题
- 江湖急救!这是为什么?
- JS中一个动态变量写法的问题!
- js如何调用框架iframe里的表单啊?在先等!!!
- 关于showModalDialog窗口的问题
- 关于Bootstrap Table ajax获取数据 将列数据也通过ajax获取问题
- 学习JavaScript 的必备 (一),让您对js的 function, javascript内置对象,this概念及之间的关系不再迷惑。(希望能置为推荐篇,为更多的js初学者关注)
- 困扰了几天的问题,请高人帮忙解决一下,谢谢!
这个隐藏的div没有任何数据以及节点,全部通过js动态更新。
关于数据可以通过ajax技术向服务器获取。 完。
该json字符串可写在js文件中,或xml文件中,谁页面一起加载
接受输入
ajax后台访问
访问结果在弹出的div中渲染
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type='text/javascript' src='http://code.jquery.com/jquery-1.8.0.min.js'></script>
<style type='text/css'>
div, ul, li, p{ margin:0; padding:0; list-style:none;}
.content{margin:0 auto; display:block; width:400px; height:100px;}
.content textarea{ width:400px; height:100px;}
#dialog{ width:200px; height:300px; border:1px solid #000; background:#fff; display:none;}
#dialog ul li{ width:190px; height:25px; line-height:25px; border-bottom:1px solid #666 }
#dialog ul li.selected{ background:blue; color:#fff;}
</style><script type="text/javascript">
//会话打开状态
var OPEN = 0;
//会话关闭状态
var CLOSE = 1;//会话类,用与选择@对象
var Dialog = function( placeholderid ) {
var placeholder = $( document.getElementById( placeholderid ) );
var data;
var maxIndex;
var currentIndex;
var self = this;
var eventState = false;
//按下回车键后触发的事件
this.entered = new Function( 'data', '' );
this.load = function( d ) {
data = d;
maxIndex = data.length - 1;
currentIndex = 0;
this.setDialogText( getHtml() );
refreshDialog();
}
this.show = function( left, top ) {
placeholder.css({
'position': 'absolute',
'left': left,
'top': top,
'display': 'block'
});
if( !eventState ) bindKeyEvent();
}
this.getStatus = function() {
return placeholder.css( 'display' ) == 'none' ? CLOSE : OPEN;
}
this.hide = function() {
placeholder.hide();
unbindKeyEvent();
}
this.setDialogText = function( text ) {
placeholder.html( text );
}
var getHtml = function() {
var html = '';
for( var i = 0; i < data.length; i ++ ) {
html += '<li> ' + data[ i ] + ' </li>';
}
html = '<ul>' + html + '</ul>';
html = '<p>关键字:' + data.keywords +'</p>' + html;
return html;
}
var refreshDialog = function() {
var elItems = placeholder.find( 'ul li' );
elItems.removeClass( 'selected' );
$( elItems[ currentIndex ] ).addClass( 'selected' );
}
var moveNext = function() {
if( currentIndex == maxIndex ) {
currentIndex = 0;
} else {
currentIndex ++;
}
refreshDialog();
}
var movePrev = function() {
if( currentIndex == 0 ) {
currentIndex = maxIndex
} else {
currentIndex --;
}
refreshDialog();
}
var enter = function() {
self.hide();
var selectedItem = data[ currentIndex ];
self.entered( selectedItem );
}
var keyEvent = function( e ) {
var keycode = e.keyCode;
switch( keycode ) {
//向上
case 38:
movePrev();
break;
//向下
case 40:
moveNext();
break;
//回车
case 13:
enter();
break;
}
}
var bindKeyEvent = function() {
$(document).bind( 'keydown', keyEvent );
eventState = true;
}
var unbindKeyEvent = function() {
$(document).unbind( 'keydown', keyEvent );
eventState = false;
}
}</script>
</head><body>
<input type="text" id="txt" size="20" />
<div id="dialog"></div>
<script>
var dialog = new Dialog( 'dialog' );
dialog.entered = function( data ) {
$( '#txt' ).val( data );
}
$( '#txt' ).bind( 'keyup', function( e ) {
var keycode = e.keyCode;
if( keycode == 38 || keycode == 40 || keycode == 13 ) return;
var data = [
"abcdefg",
"1234567",
"abcdefg",
"1234567",
"abcdefg",
"1234567",
"abcdefg",
"1234567",
"abcdefg",
"1234567"
];
dialog.load( data );
var offset = $( this ).offset();
dialog.show(offset.left, offset.top + 20 )
} );
</script>
</body>
</html>
从以前一个效果中的一部份代码, 有楼主想要的效果, 给楼主参考
1 把要提示的数据保存在一个数组里 Arr
2 获取文本框的onkeyup事件 把文本框的值传递给一个方法 Autocomplete
3 Autocomplete方法中 遍历数组 Arr 找出所有符合条件的值
4 根据这些值 生成下拉提示列表、
5 ok