请教各位大侠一个封装htc,combobox事件问题。

Spr_Perfei 2009-12-02 12:02:13
<public:component tagname="ComboBox">
<public:defaults viewLinkContent="true" canHaveHTML="true"/>
<public:property name="value" get="getValue" put="setValue"/>
<public:attach event="oncontentready" onevent="f_CreateComboBox()" />
<public:method name="add"/>
<public:method name="removeAll"/>
</public:component>
<SCRIPT LANGUAGE="JScript">
var oPopup = null;
var ComboBox = null;
var ComboBoxIpt = null;
var DropDown = null;
var DropList = null;
var aNodes = new Array();
var cValue="";
var ScrollBar=null;
var flag=0;
function getValue()
{
return ComboBoxIpt.value;
}
function setValue(val)
{
if(val!=null)
{
cValue=val;
}
}
function add(text)
{
aNodes.push(text);
}
function removeAll()
{
ComboBoxIpt.value = "";
while(true)
{
if(aNodes.pop()==undefined)
return;
}
}
function f_CreateComboBox()
{
aNodes = f_CreateNodes(element.innerHTML);
DropList = f_PublicCreateDropList();
ScrollBar = f_PublicCreateScrollBar();
f_PublicCreateDropListData(aNodes);
ComboBox = f_PublicCreateComboBox();
ComboBoxIpt = f_PublicCreateComboBoxIpt();
DropDown = f_PublicCreateDropDown();
oPopup = f_PublicCreatePopup();
if(aNodes.length==2)
ComboBoxIpt.value=aNodes[0]
if(cValue=="")
ComboBoxIpt.value="--------";
DropDown.attachEvent("onmousedown",fnMousedown);
ComboBoxIpt.attachEvent("onfocus",ComboBoxFocus);
ComboBoxIpt.attachEvent("onpropertychange",ComboBoxChange);
ComboBoxIpt.attachEvent("onblur",ComboBoxIptBlur);
ComboBoxIpt.attachEvent("onkeydown",ComboBoxIptCancel) //添加代码,取消键盘事件
element.document.attachEvent("onclick", chkstat);
}
function f_PublicCreateComboBox()
{
var oTable = element.document.createElement("TABLE");
oTable.cellSpacing = 0;
oTable.cellPadding = 0;
oTable.id = "AXTeamComboBox"+uniqueID;
oTable.style.display = "inline";
oTable.border = 0;
oTable.bgColor = "#FFFFFF";
element.insertAdjacentElement("BeforeBegin",oTable);
oTable.ComboBoxFocus = false;
return oTable;
}
function f_PublicCreateComboBoxIpt()
{
var oInput = element.document.createElement("INPUT");
oInput.type = "text";
oInput.name=element.name;
oInput.style.cssText="border-right-style:none";
oInput.style.width = element.width;
oInput.id = "AXTeamComboBoxIpt"+uniqueID;
oInput.value=cValue;
ComboBox.insertRow().insertCell().appendChild(oInput);
ComboBox.rows[0].bgColor = "#FFFFFF";
//oInput.value="--------"
return oInput;
}
function f_PublicCreateDropDown()
{
var oTable = element.document.createElement("TABLE");
oTable.cellSpacing = 0;
oTable.cellPadding = 0;
oTable.id = "AXTeamDropDown"+uniqueID;
oTable.border = 0;
oTable.bgColor="#DBD8D1";
oTable.style.cssText = "display:inline;cursor:default;border:1px;border-style:solid;border-top-color:#404040;border-right-color:#D4D0C8;border-left-color:#D4D0C8;border-bottom-color:#D4D0C8";
//oTable.attachEvent("onselectstart", fnCancel);
var otd = oTable.insertRow().insertCell();
var oButton = element.document.createElement("INPUT");
oButton.type = "button";
oButton.value = "6";
oButton.id = "AXTeamDropDownButton"+uniqueID;
oButton.attachEvent("onselectstart", fnCancel);
oButton.style.cssText = "font-family: webdings;font-size:8px;text-align:center;width:16px;height:18px";
otd.appendChild(oButton);
ComboBox.rows[0].insertCell().appendChild(oTable);
return oTable;
}
function f_PublicCreateDropList()
{
var oTable = element.document.createElement("TABLE");
oTable.cellSpacing = 1;
oTable.cellPadding = 0;
oTable.border = 0;
oTable.bgColor="#FFFFFF";
oTable.style.cssText = "font-size:9pt;cursor:default";
oTable.attachEvent("onselectstart", fnCancel);
return oTable;
}
function f_PublicCreateDropListData(aNodes,redata)
{
try{
if(!redata)
var re=new RegExp("^");
else
var re=new RegExp(redata,"i");
var otd = null;
var No=DropList.rows.length;
for(i=0;i<No;i++)DropList.deleteRow();
for(var i=0;i<aNodes.length;i++)
{
if(re.test(aNodes[i]))
{
otd = DropList.insertRow().insertCell();
otd.style.height = "12px";
otd.style.fontSize = "9pt";
otd.innerHTML = aNodes[i];
otd.attachEvent("onmouseover",DropListOver);
otd.attachEvent("onmouseout",DropListOut);
otd.attachEvent("onclick",DropListClick);
otd.attachEvent("onmousedown",flag_set);
}

}
}
catch(e)
{
}
}
function flag_set()
{
flag=1;
}
function f_PublicCreatePopup()
{
var oSpan = element.document.createElement("span");
oSpan.style.cssText = "position:absolute;display:none;cursor:default;z-index:100;border:1px solid #666666;";
element.parentElement.appendChild(oSpan);
return oSpan;
}
function f_PublicCreateScrollBar()
{
var oDiv = element.document.createElement("div");
oDiv.style.cssText = "overflow-x:hidden;overflow-y:auto";
return oDiv;
}
function f_CreateNodes(htmlText)
{
var oSpan = element.document.createElement("span");
oSpan.innerHTML = htmlText;
oSpan.style.cssText="font-size:9pt";
var xNodes = oSpan.childNodes;
var Nodes = new Array();
var nNumNodes = (xNodes == null) ? 0 : xNodes.length;
for (var nIndex = 0; nIndex < nNumNodes; nIndex++)
{
var node = xNodes[nIndex];
if (node != null)
Nodes = Nodes.concat(f_CreateDropListItems(node));
}
return Nodes;
}
function f_CreateDropListItems(oNode)
{
var rNodes;
var szTagName = (oNode.tagName == null) ? "" : oNode.tagName.toLowerCase();
if(szTagName == "option")
{
var szText = oNode.innerText;
rNodes = new Array(szText);
}
else
rNodes = new Array();
return rNodes;
}
function fnMousedown()
{

if(event.srcElement != ComboBoxIpt)
{
if(oPopup.style.display == '')
{
oPopup.style.display = 'none';
return;
}
f_PublicCreateDropListData(aNodes)
ComboBoxIpt.select();
}
//oPopup.appendChild(DropList);
ScrollBar.appendChild(DropList);
oPopup.appendChild(ScrollBar);
oPopup.style.width = ((oPopup.offsetWidth < ComboBox.offsetWidth) ? ComboBox.offsetWidth : oPopup.offsetWidth)-2;
ScrollBar.style.width=oPopup.style.width;
ScrollBar.style.height = (DropList.rows.length<=7) ? "100%" : 103;
oPopup.style.left = getx(ComboBox);
oPopup.style.top = gety(ComboBox)+22;
oPopup.style.display = 'inline';
ScrollBar.children[0].width = "100%";
ComboBox.ComboBoxFocus = true;
}

function DropListOver()
{
obj = event.srcElement;
obj.bgColor='highlight';obj.style.color='#FFFFFF';obj.style.cursor='default';
}
function DropListOut()
{
obj = event.srcElement;
obj.bgColor='#FFFFFF';obj.style.color='#000000';
}
function DropListClick()
{
obj = event.srcElement;
ComboBoxIpt.value = obj.innerText;
oPopup.style.display = "none";
ComboBoxIpt.select();
flag=0;
DropDown.style.color = '#000000';
}
function ComboBoxFocus()
{
if(ComboBox.ComboBoxFocus) return;

ComboBox.ComboBoxFocus = true;
}
function ComboBoxChange()
{
f_PublicCreateDropListData(aNodes,ComboBoxIpt.value);
fnMousedown();
addOption();
}
///,用于当下拉列表为空时,取消键盘输入事件
function ComboBoxIptCancel()
{
if((aNodes.length==0)||(aNodes[0].indexOf("--")>-1))
return false;
if((aNodes.length==1)&&(aNodes[0].indexOf("")>-1))
return false;
}
//结束
function addOption(){
if(event.keyCode==13)
{
for(var i=0;i<aNodes.length;i++)
{
node = aNodes[i];
if(node == ComboBoxIpt.value)
return;
}
aNodes[aNodes.length] = ComboBoxIpt.value;
}
}
添加ComboBoxIpt函数。作用ComboBox控件内容判断
function ComboBoxIptBlur()
{
var str=ComboBoxIpt.value;
if(flag)
return;

if(str==""){ComboBoxIpt.value="--------"
return;
}
if(str=="--------") return;
if(aNodes.length==0){
if(str!="") ComboBoxIpt.value="--------";
return;
}
if(aNodes[0].indexOf("--")>-1){
if(str!="") ComboBoxIpt.value="--------";
return;
}

for(var i=0;i<aNodes.length;i++)
{
node=aNodes[i];
var j=node.indexOf(str)
if(node==str)
return;
else if(j>-1)
{
alert("请选择下拉列表中选择存在的项目!");
ComboBoxIpt.value=str;
return;
}
}
alert("请选择下拉列表中选择存在的项目!");
ComboBoxIpt.value="";
ComboBoxIpt.focus()
return;
}
function chkstat()
{
var oEl = event.srcElement;
while( null != oEl && oEl != ComboBox)
{
oEl = oEl.parentElement;
}
if(oEl == null)
{
ComboBox.ComboBoxFocus = false;
oPopup.style.display = "none";
}
}
function fnCancel()
{
return false;
}
function getx(e)
{
var l=e.offsetLeft;
while(e=e.offsetParent){
l+=e.offsetLeft;
}
return l;
}
function gety(e)
{
var t=e.offsetTop;
while(e=e.offsetParent){
t+=e.offsetTop;
}
return t;
}
</SCRIPT>



这是个封装的 combobox,但是好像没有 Change事件,怎么加个Change事件,然后我asp里,再怎么调Change。
谢谢了。
我不太懂,请各位大侠详细点。
...全文
35 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧