独孤问学
原文遗漏 包括一些小bug都已修复








Sunny_Bear
不要过多指望源码。 对着视频敲对学习更有帮助。 这个视频这么详细。。。。
慕虎4040376
用onmousedown
慕田峪7268702
链接:http://pan.baidu.com/s/1boFIrbL 密码:q9vm
玖八
在一台机器上是没有问题的,不涉及跨域, 涉及跨域,需要后台加上允许跨域的 header
Mr___lu
直接使用css的标签选择器就可以实现
此昵称已用
qq_小镇晨光_0
你的代码中实现了吗 ?怎么用td.onclick 方法不能实现 也不报错
紫_羽
课程下方有同学已经给出了实现
点击下面的提示列表,输入框的值就会成为列表中的值的实现方法。
//将关联内容显示在输入框中。而onmousedown执行顺序在input的onblur之前
//注意
//此处必须使用onmousedown 不能使用onclick
//onclick = onmousedown + onmouseup
//onclick点击之后input就会失去焦点,执行清除函数,清空关联内容,导致无法
td.onmousedown=function(){
document.getElementById("keyword").value = this.innerHTML;
};
Icclown
if(json!=''){ setContent(json) }
薄桜
这个问题我也没搞明白,我是来层经验的!嘿嘿,期待大神的回复
白砂糖K
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>ajax</title>
<style type="text/css">
.mouseOver{
background: #708090;
color: #FFFAFA;
}
.mouseOut{
background: #FFFAFA;
color: #000000;
}
</style>
<body>
<div>
<div style="position:relative">
<input type="text" size="50" id="keyword" onkeyup="getMoreContents()" onblur="keywordBlur()" onfocus="getMoreContents()">
<input type="button" value="百度">
</div>
<div id="popDiv" style="position:absolute">
<table id="content_table" bgcolor="#FFFAFA">
<tbody id="content_table_body">
</tbody>
</table>
</div>
<div>aaaa</div>
</div>
</body>
<script type="text/javascript">
var xmlHttp;
function getMoreContents(){
var content=document.getElementById("keyword");
if(content.value==""){
clearContent();
return;
}
xmlHttp=createXMLHttp();
var url="search?keyword="+escape(content.value);
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange=callback;
xmlHttp.send(null);
}
//创建xmlHttp对象
function createXMLHttp(){
var xmlHttp;
if(window.XMLHttpRequest){
xmlHttp=new XMLHttpRequest();
}
if(window.ActiveXObject){
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
if(!xmlHttp){
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
}
return xmlHttp;
}
//回调函数
function callback(){
if(xmlHttp.readyState==4){
if(xmlHttp.status==200){
var result=xmlHttp.responseText;
var json=eval("("+result+")");
setContent(json);
}
}
}
//设置关联数据的展示
function setContent(contents){
clearContent();
setLocation();
var size=contents.length;
for(var i=0;i<size;i++){
var nextNode=contents[i];
var tr=document.createElement("tr");
var td=document.createElement("td");
td.setAttribute("border", "0");
td.setAttribute("bgcolor", "#FFFAFA");
td.setAttribute("id",i);
td.onmouseover=function(){
this.className='mouseOver';
};
td.onmouseout=function(){
this.className='mouseOut';
};
td.onclick=function(){//点击获取td的值
document.getElementById("keyword").value=this.innerHTML;
clearContent();
};
var text=document.createTextNode(nextNode);
td.appendChild(text);
tr.appendChild(td);
document.getElementById("content_table_body").appendChild(tr);
}
}
//清空之前的数据
function clearContent(){
var contTableBody=document.getElementById("content_table_body");
var size=contTableBody.childNodes.length;
for(var i=size-1;i>=0;i--){
contTableBody.removeChild(contTableBody.childNodes[i]);
}
document.getElementById("popDiv").style.border="none";
}
//失去焦点时
function keywordBlur(){
setTimeout("clearContent()",1000);//停一秒再清空,不然选择无效
}
//设置数据展示样式
function setLocation(){
var content=document.getElementById("keyword");
var width=content.offsetWidth;
var left=content["offsetLeft"];
var top=content["offsetTop"]+content.offsetHeight;
var popDiv=document.getElementById("popDiv");
popDiv.style.border="black 1px solid";
//popDive.style.left=left+"px";
//popDiv.style.top=top+"px";
popDiv.style.width=width+"px";
document.getElementById("content_table").style.width=width+"px";
}
</script>
</html>
白砂糖K
给弹出的table加属性
position:relative;z-index:300;
z-index后面跟的数值是来控制优先级的。谁的数值大,谁在上面。只要保证弹出的table的z-index比搜索框下面,的元素的z-index大就可以。
同时,z-index属性,只有在position存在的情况下使用
傻傻的人傻
td.onmousedown=function(){
//当鼠标点击一个关联数据的时候,被选中的数据 自动填充到输入框里面
document.getElementById("keyword").value=this.innerHTML;
//清除div边框
document.getElementById("popDiv").style.border="none";
}
李兴杰
代码老师已经全部敲了一遍,源码要不要都不重要了,如果记忆不深刻的话,最好跟着老师敲一遍,效果会更好!
慕哥3122238
在课程的右下角
慕粉013049517
慕侠1852468
在每个td中增加一个onclick事件,比如onclick=clickValue(this)
javascript中:
function clickValue(tr){
var oInput = document.getElementById("输入框的ID值");//获得输入框对象
oInput.value = ""; //先将输入框的值清空
oInput.value = tr.innerHTML;
}
MyEmpress
URLDecoder会报错啊
慕前端9018328
用<form>表单的时候才设置<input>的name属性;
本课程中均使用javascript进行后台的交互,用的是url进行传值:
var url = "servlet/searchServlet?keyword=" + encodeURI(content.value);
不用对<input>进行设置,url中`?`后的`keyword=XX`就是传到后台的parameter和parameterValue;
3. 可以检查一下你的web.xml中servlet的url-pattern配置:
<servlet-mapping> <servlet-name>searchServlet</servlet-name> <url-pattern>/servlet/searchServlet</url-pattern> </servlet-mapping>
看是否和url中的相同。
慕粉3815961
显示中文的问题我是这样解决的,改成doPost请求,前台两次编码转换
var url = "search?keyword="+encodeURI(encodeURI(content.value));
后台也需要转换一次
// request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String keyword = request.getParameter("keyword");
keyword =URLDecoder.decode(keyword, "UTF-8");
尼豪
td.onmousedown = function(){
//当鼠标点击一个关联数据时,自动在输入框添加数据
document.getElementById("keyword").value =this.innerText;
};