Select.htm
<select style="behavior:url('Select.htc');">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
Select.htc
<public:attach event=oncontentready onevent=initSelect()>
<script>
function initSelect()
{
//
element.style.display="none";
//模拟组合框
vComboxDiv=document.createElement("div");
vOptionInput=document.createElement("input");
vOptionInput.style.border="1px solid #000000";
vOptionInput.style.width=element.offsetWidth+50;
vOptionInput.value=element.options[element.selectedIndex].text;
vComboxDiv.appendChild(vOptionInput);
vOptionInput.attachEvent("onblur",onOptionInputBlur);
vComboxInput=document.createElement("input");
vComboxInput.style.border="1px solid #000000";
vComboxInput.style.borderWidth="1 1 1 0";
vComboxInput.type="text";
vComboxInput.style.backgroundColor="buttonface";
vComboxInput.style.font="normal 11pt Marlett";
vComboxInput.value="6";
vComboxInput.readOnly=true;
vComboxInput.style.width=20;
vComboxDiv.appendChild(vComboxInput);
vComboxInput.attachEvent("onclick",onComboxInputClick);
window.document.body.insertAdjacentElement("afterbegin",vComboxDiv);
vComboxDiv.style.position="absolute";
vComboxDiv.style.left=getElementDefineLeft(element);
vComboxDiv.style.top=getElementDefineTop(element);
//模拟列表框
vListDiv=document.createElement("div");
vListDiv.style.display="none";
vListDiv.style.border="1px solid #000000";
vListDiv.style.width=vComboxDiv.offsetWidth;
vTable=document.createElement("table");
vTable.border="0";
vTable.cellSpacing="0";
vTable.cellPadding="0";
vTable.width="100%";
for(kIndex=0;kIndex<element.length;kIndex++)
{
var vTr=vTable.insertRow(kIndex);
var vTd=vTr.insertCell(0);
vTd.style.font="normal 9pt 宋体";
vTd.style.backgroundColor="#FFFFFF";
vTd.innerHTML=element.options[kIndex].text;
vTd.attachEvent("onmousedown",onListMouseDown);
vTd.attachEvent("onmouseover",onListMouseOver);
vTd.attachEvent("onmouseout",onListMouseOut);
}
vListDiv.appendChild(vTable);
window.document.body.insertAdjacentElement("afterbegin",vListDiv);
vListDiv.style.position="absolute";
vListDiv.style.left=getElementDefineLeft(element);
vListDiv.style.top=getElementDefineTop(element)+vOptionInput.offsetHeight;
//
}
//鼠标丢失焦点组合框
function onOptionInputBlur()
{
if(!isSelectOption(element,window.event.srcElement.value))
{
element.length=element.length+1;
element.options[element.length-1].text=window.event.srcElement.value;
}
}
//鼠标按下组合框
function onComboxInputClick()
{
vListDiv.style.display="";
for(iRowCount=vTable.rows.length-1;iRowCount>=0;iRowCount--)
{
vTable.deleteRow(iRowCount);
}
for(kIndex=0;kIndex<element.length;kIndex++)
{
var vTr=vTable.insertRow(kIndex);
var vTd=vTr.insertCell(0);
vTd.style.font="normal 9pt 宋体";
vTd.style.backgroundColor="#FFFFFF";
vTd.innerHTML=element.options[kIndex].text;
vTd.attachEvent("onmousedown",onListMouseDown);
vTd.attachEvent("onmouseover",onListMouseOver);
vTd.attachEvent("onmouseout",onListMouseOut);
}
element.document.attachEvent('onmousedown',onDocumentMouseDown);
}
//鼠标按下列表框项目
function onListMouseDown()
{
element.options[window.event.srcElement.parentElement.rowIndex].value=window.event.srcElement.innerHTML;
vOptionInput.value=window.event.srcElement.innerHTML;
vListDiv.style.display="none";
element.document.detachEvent("onmousedown",onDocumentMouseDown);
}
//鼠标移至列表框项目
function onListMouseOver()
{
window.event.srcElement.style.backgroundColor="#336699";
}
//鼠标移出列表框项目
function onListMouseOut()
{
window.event.srcElement.style.backgroundColor="#FFFFFF";
}
//文档中鼠标按下[隐藏列表框]
function onDocumentMouseDown()
{
if(vListDiv.contains(event.srcElement))
{
return;
}
vListDiv.style.display="none";
element.document.detachEvent("onmousedown",onDocumentMouseDown);
}
//通用库函数
//取元素绝对位置Left
function getElementDefineLeft(vObject)
{
var iElementLeft=vObject.offsetLeft;
while(vObject=vObject.offsetParent)
{
iElementLeft+=vObject.offsetLeft;
}
return iElementLeft;
}
//取元素绝对位置Top
function getElementDefineTop(vObject)
{
var iElementTop=vObject.offsetTop;
while(vObject=vObject.offsetParent)
{
iElementTop+=vObject.offsetTop;
}
return iElementTop;
}
//判断是否是列表子项
function isSelectOption(vObject,strOption)
{
var bIsOption=false;
for(kIndex=0;kIndex<vObject.length;kIndex++)
{
if(vObject.options[kIndex].text==strOption)
{
bIsOption=true;
}
}
return bIsOption;
}
</script>
</public:attach>