87,907
社区成员
发帖
与我相关
我的任务
分享
//得到四个对象
function initVars() {
//输入文本框
inputField = document.getElementById("salesorder_deladdress");
//层中的表格
nameTable = document.getElementById("name_table");
//下拉的层
completeDiv = document.getElementById("popup");
//表格中的表主体
nameTableBody = document.getElementById("name_table_body");
}
function findNames(){
initVars();
if(inputField.value.length > 0){
SalesOrderEdit.getAddressName( document.getElementById("receivingunit_id").value,inputField.value,callback);
}else{
clearNames();
}
}
// 回调函数
function callback(the_names){
//清除表格原有的内容
clearNames();
var size = the_names.length;
if(size == 0)
{
document.getElementById("popup").style.border = "none";
}
else
{
//设置表格的位置
setOffsets();
//单元格的行,列,文本节点
var row, cell, txtNode;
for (var i = 0; i < size; i++) {
//名字的内容
var nextNode = the_names[i];
//建立一行
row = document.createElement("tr");
cell = document.createElement("td");
//匿名函数
cell.onmouseout = function() {this.className = 'mouseOver';} ;
cell.onmouseover = function() {this.className = 'mouseOut';} ;
//设置单元格的属性
cell.setAttribute("bgcolor", "#FFFFFF");
cell.setAttribute("border", "0");
//点击,选到文本框中
cell.onclick = function() {populateName(this);};
txtNode = document.createTextNode(nextNode);
//文本加到单元格
cell.appendChild(txtNode);
//单元格加到表格行
row.appendChild(cell);
//行加到表格
nameTableBody.appendChild(row);
}
}
}
function setOffsets() {
//文本框对象的可见宽度
var end = inputField.offsetWidth;
//文本框
var left = calculateOffsetLeft(inputField);
//层的顶部位置
var top = calculateOffsetTop(inputField) + inputField.offsetHeight;
//设置层的位置
completeDiv.style.border = "black 1px solid";
completeDiv.style.left = left + "px";
completeDiv.style.top = top + "px";
//表格的宽度
nameTable.style.width = end + "px";
}
function calculateOffsetLeft(field) {
return calculateOffset(field, "offsetLeft");
}
function calculateOffsetTop(field) {
return calculateOffset(field, "offsetTop");
}
//计算位置的函数:元素,属性
function calculateOffset(field, attr) {
var offset = 0;
while (field) {
//文本框[属性],这种写法得到当前元素相对于父元素的偏移值
offset += field[attr];
field = field.offsetParent;
}
return offset;
}
function populateName(cell) {
//选中的单元格的值放到文本框中
inputField.value = cell.firstChild.nodeValue;
clearNames();
}
function clearNames() {
//有多少行
var ind = nameTableBody.childNodes.length;
for (var i = ind - 1; i >= 0; i--) {
//删除每一行
nameTableBody.removeChild(nameTableBody.childNodes[i]);
}
//层的外框
completeDiv.style.border = "none";
}
}
<tr><td align="left" width="100%" colspan="2"><label>送货地址<span class="small">最长100•必填</span></label><html:text property="salesorder_deladdress" size="20" styleClass="required max-length-100" styleId="salesorder_deladdress" onkeyup="findNames();" /></td></tr>
<tr><td><div style="position:absolute; " id="popup">
<div align="left">
<table id="name_table" bgcolor="#FFFFFF" border="0" cellspacing="0" cellpadding="0" >
<tbody id="name_table_body" class="westFont" >
</tbody>
</table>
</div>
</div>
</td></tr>
事情焦点先隐藏再赋值应该是没有问题的
为div添加键盘事件,上下键
按上就选择rowIdnex - 1,向下就+1 ;且高亮选择