制作 类似 google 下拉框的用户自定义控件的实现思路及代码参考

本文介绍了一种实现类似Google搜索下拉框效果的用户自定义控件的思路和代码。通过组合TextBox、DIV和SELECT控件,结合JavaScript事件处理,如onkeydown和onmouseover,动态调整DIV和SELECT的位置及内容,提高用户输入体验。提供的代码示例展示了如何创建和响应用户输入,以及如何从XML数据加载选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果做如下效果:
     

     听很多人说过 google 输入条件下拉筐输入时,自动出现一些匹配的信息,这种模式相当不错.
    
    E8.Net架构中 已经把种输入模式做成了控件,帮助系统改善各种录入项的用户体验.

    实现思路是: 
      1、组合 一个 TextBox 控件 、 一个DIV 控件 及 一个 SELECT | OPTION 控件
      2、通过javascript动态 指定 DIV控件的位置 及 SELECT |OPTION 控件 的 options 内容
      3、通过一些 事件脚本  onkeydown onmouseover....实现一些效果


    代码参考:
        
< input name = ' itemname '  autocomplete = " off "  id = ' itemname '  value = ''  onkeydown = " focusToDropDown('itemsForDropdown') "  onkeyup = " getItemsForDropdown('itemsForDropdownLayer','itemsForDropdown','itemname','hidXml',this); "   />  
                
< div id = ' itemsForDropdownLayer '  onmouseover = " MoverToDropDownLayer('itemsForDropdown'); "  style = ' display: none; position:absolute; width:120px; left: 120; top: 90; z-index:2 '
                 onmouseout
= " hideMe('itemsForDropdownLayer','none'); " >  
                
< select id = ' itemsForDropdown '    class = " combo-list "   onkeydown = " selectOnReturn('itemsForDropdownLayer','itemname',this); "  onclick = " getSelectedLabel('itemsForDropdownLayer','itemname',this); "  
                style
= ' width: 100%; '  size = ' 16 ' >   < option value = '' ></ option >   </ select >   </ div >

  部分脚本代码参考:
    
function getItemsForDropdown(id,idSelect,idText,idFields,obj)
    
{
     
         var 
object = document.getElementById(id);
         var objSelect 
= document.getElementById(idSelect);
          var objText 
= document.getElementById(idText);
          var objFields 
= document.getElementById(idFields);
          
         
          
          
       
         var i 
= 0;
         var j
=0;
         var sCurr 
= '';
         var soptText
='';
         var blnAdd 
= false;
         
         
         
         
if(objFields != null)
         
{  var sXml = objFields.value;
            xmlDroplst.loadXML(sXml);
         }

        
         
         
if(objText != null)
        
{
            sCurr 
= objText.value;
        }

        
        
if(object != null)
        
{
            
            var nodes 
= xmlDroplst.documentElement.childNodes;
            
            
if(objSelect != null)
            
{
               objSelect.options.length 
= 0;  //清除内容
               
               
for (i=0;i<nodes.length;i++)
               
{
                    soptText 
= nodes(i).getAttribute("Text");
                    blnAdd 
= false;
                    
if(sCurr == '')
                    
{
                       blnAdd 
= true;
                    }

                    
else
                    
{
                       
if(soptText.indexOf(sCurr) == 0)
                         
{
                            blnAdd
=true;
                         }

                    }

                    
if(blnAdd == true)
                    
{
                        objSelect.add(document.createElement(
"OPTION"));
                        objSelect.options[j].text
= soptText;
                        objSelect.options[j].value
=j; 
                        j
++;
                    }

                }



            }

            
            
            
object.style.left = absoluteLocation(obj, 'offsetLeft'- 2 + "px";       
            
object.style.top = absoluteLocation(obj, 'offsetTop'+ obj.offsetHeight + 2 + "px"
            
object.style.width = obj.offsetWidth + 2 + 'px';
            hideMe(id,
'');
        }

    }

    
    
// 来源于XMLHTTP异步获取,


    E8.Net工作流平台为企业应用开发提供了一个起点,欢迎访问 : http://www.feifanit.com.cn/productFlow.htm
         
 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值