网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的考试资料:

 

标题 在IE8上JS实现combobox支持拼音检索功能
内容
    这篇文章主要介绍了在IE8上JS实现combobox支持拼音检索功能的相关资料,本文介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下
    最近在ie8碰到一个js问题,需要实现(ie8)使用拼音或者拼音首字母来检索select中的内容,原来的combobox只能支持汉字输入检索,现在需要进行改进,现在我将一步一步的实现方法记录下来,功能简单,也可能有bug和不足,供学习参考。(本文只是提供思路学习和备份,实际情况需要在ie8或者ie兼容模式上使用,所以没有考虑到别的浏览器)
    目录结构:
    test
    |--js
    |--index.html
    在index页面中添加
    index.html
    <!DOCTYPE html> 
    <html> 
    <head> 
    <meta charset="utf-8" /> 
    <title></title> 
    <script type="text/javascript" src="js/autoComplete.js" ></script> 
    <script type="text/javascript"> 
    </script> 
    </head> 
    <body> 
    <input type="text" id="txtDisplay" /> 
    <select id="city"> 
    <option value="1">北京</option> 
    <option value="2">上海</option> 
    <option value="3">广州</option> 
    <option value="4">深圳</option> 
    <option value="5">重庆</option> 
    <option value="6">天津</option> 
    <option value="7">沈阳</option> 
    <option value="8">南京</option> 
    <option value="9">武汉</option> 
    <option value="10">长春</option> 
    <option value="11">成都</option> 
    <option value="12">大连</option> 
    <option value="13">杭州</option> 
    <option value="14">青岛</option> 
    <option value="15">a济南</option> 
    <option value="16">厦门</option> 
    <option value="17">福州</option> 
    <option value="18">西安</option> 
    <option value="19">长沙</option> 
    <option value="20">哈尔滨</option> 
    </select> 
    </body> 
    </html>
    名单
    效果:开始将select 的下拉列表框隐藏,当点击input文本框的时候显示到input框的下面,选择完成后再将select隐藏。
    js实现:
    如果一个页面有多个地方需要实现这样的功能,这个时候就要使用面向对象的思维,尽可能代码重用,我们需要自定义一个ap这样的集合。
    autoComplete.js
    function Map() { 
    /** 存放键的数组(遍历用到) */
    this.keys = new Array(); 
    /** 存放数据 */
    this.data = new Object(); 
    /** 
    * 放入一个键值对 
    * @param {String} key 
    * @param {Object} value 
    */
    this.put = function(key, value) { 
    if(this.data[key] == null){ 
    this.keys.push(key); 
    } 
    this.data[key] = value; 
    }; 
    /** 
    * 获取某键对应的值 
    * @param {String} key 
    * @return {Object} value 
    */
    this.get = function(key) { 
    return this.data[key]; 
    }; 
    /** 
    * 删除一个键值对 
    * @param {String} key 
    */
    this.remove = function(key) { 
    this.keys.remove(key); 
    this.data[key] = null; 
    }; 
    /** 
    * 遍历Map,执行处理函数 
    * 
    * @param {Function} 回调函数 function(key,value,index){..} 
    */
    this.each = function(fn){ 
    if(typeof fn != 'function'){ 
    return; 
    } 
    var len = this.keys.length; 
    for(var i=0;i<len;i++){ 
    var k = this.keys[i]; 
    fn(k,this.data[k],i); 
    } 
    }; 
    /** 
    * 获取键值数组(类似Java的entrySet()) 
    * @return 键值对象{key,value}的数组 
    */
    this.entrys = function() { 
    var len = this.keys.length; 
    var entrys = new Array(len); 
    for (var i = 0; i < len; i++) { 
    entrys[i] = { 
    key : this.keys[i], 
    value : this.data[i] 
    }; 
    } 
    return entrys; 
    }; 
    /** 
    * 判断Map是否为空 
    */
    this.isEmpty = function() { 
    return this.keys.length == 0; 
    }; 
    /** 
    * 获取键值对数量 
    */
    this.size = function(){ 
    return this.keys.length; 
    }; 
    /** 
    * 重写toString 
    */
    this.toString = function(){ 
    var s = "{"; 
    for(var i=0;i<this.keys.length;i++,s+=','){ 
    var k = this.keys[i]; 
    s += k+"="+this.data[k]; 
    } 
    s+="}"; 
    return s; 
    }; 
    } 
    Array.prototype.remove = function(s) { 
    for (var i = 0; i < this.length; i++) { 
    if (s == this[i]) 
    this.splice(i, 1); 
    } 
    }
    现在我们要写一个程序加载入口文件,用来将input和select的对象传入,然后进行事件绑定等等一系列的操作。
    var autoCompleteMap = new Map(); //组件容器,便于组件事件驱动时调用,同时支持多组件管理 
    var splitFleg = "_"; //分隔符 
    /** 
    * 文本框,下拉框组合成自动补全组件 
    * @param {Object} txtObj 文本框对象 
    * @param {Object} selectObj 下拉框对象 
    * @param {int} selectSize 显示下拉框的数量 
    * @param {int} selectLength 下拉框的长度 
    */
    function AutoComplete(txtObj, selectObj, selectSize, selectLength) { 
    this.cacheContainer = new Array(); //缓存容器,用来在页面刚刚加载的时候将option中的内容缓存到cacheContainer中 
    this.init = function() { 
    this.initCache(); //缓存数据,将option的数据缓存到cacheContainer 
    this.initCSS(); //初始化css 将select隐藏 
    this.registerEvent(); //注册事件 
    this.setSelectIdPosition(); //设置select的位置 
    // 缓存当前组件,便于组件事件驱动时调用,同时支持多组件管理 
    autoCompleteMap.put(txtObj.id + selectObj.id, this); 
    // 界面刷新后,将直属机构下拉框text值,写入文本框 
    var selectIndex = selectObj.selectedIndex; 
    if (selectIndex > 0) //第一个内容一般是 【请选择】,如果没有则将>0改为>=0 
    txtObj.value = selectObj.options[selectIndex].text; 
    } 
    //缓存数据,将option的数据缓存到cacheContainer 
    this.initCache = function() { 
    var select_options = selectObj.options; 
    if (select_options == null || select_options.length == 0) { 
    return; 
    } 
    this.cacheContainer = []; 
    for (var i = 0; i < select_options.length; i++) { 
    this.cacheContainer[i] = select_options[i].text + splitFleg + select_options[i].value; 
    } 
    } 
    this.initCSS = function() { 
    selectObj.style.display = "none"; 
    selectObj.style.position = "absolute"; 
    selectObj.style.zIndex = 2; 
    selectObj.style.width = selectLength + "px"; 
    selectObj.multiple = "multiple"; 
    txtObj.style.width = selectLength - 5 + "px"; 
    } 
    this.registerEvent = function() { 
    // 下拉框事件 
    selectObj.ondblclick = this.doubleClickEvent; 
    selectObj.onkeyup = this.keyupEvent; 
    selectObj.onblur = this.OnblurEvent; 
    selectObj.onfocus = this.OnfocusEvent; 
    // 文本框事件 
    txtObj.onfocus = this.OnfocusEvent; 
    txtObj.onblur = this.OnblurEvent; 
    txtObj.onkeyup = this.txtObjKeyupEvent; 
    } 
    this.setSelectIdPosition = function() { 
    var position = this.findPosition(txtObj); 
    selectObj.style.left = position[0] + "px"; 
    selectObj.style.top = position[3] + 3 + "px"; 
    } 
    this.findPosition = function(oElement) { 
    var x2 = 0; 
    var y2 = 0; 
    var width = oElement.offsetWidth; 
    var height = oElement.offsetHeight; 
    if (typeof(oElement.offsetParent) != 'undefined') { 
    for (var posX = 0, posY = 0; oElement; oElement = oElement.offsetParent) { 
    posX += oElement.offsetLeft; 
    posY += oElement.offsetTop; 
    } 
    x2 = posX + width; 
    y2 = posY + height; 
    return [posX, posY, x2, y2]; 
    } else { 
    x2 = oElement.x + width; 
    y2 = oElement.y + height; 
    return [oElement.x, oElement.y, x2, y2]; 
    } 
    } 
    //-----------------绑定的事件------------------------ 
    /** 
    * select下拉列表框双击事件 
    */
    this.doubleClickEvent = function() { 
    selectObj.style.display = "none"; 
    var selectIndex = selectObj.selectedIndex; 
    txtObj.value = selectObj.options[selectIndex].text; 
    } 
    /** 
    * 鼠标点击松开事件 
    */
    this.keyupEvent = function() { 
    var autocomplete = autoCompleteMap.get(txtObj.id + selectObj.id); 
    if (event.keyCode == 13) { 
    event.returnValue = false; 
    var srcElem = document.activeElement; //获取当前聚焦的对象 
    var testval = srcElem.id; 
    if (testval == selectObj.id) { 
    autocomplete.doubleClickEvent(); 
    } 
    } 
    } 
    /** 
    * 聚焦事件 
    */
    this.OnblurEvent = function() { 
    var srcElem = document.activeElement; 
    var testval = srcElem.id; 
    if (testval != selectObj.id && testval != txtObj.id) { //如果没有聚焦到当前input框或者select列表 
    selectObj.style.display = "none"; //将select列表隐藏 
    } 
    } 
    /** 
    * 聚焦事件 
    */
    this.OnfocusEvent = function() { 
    var autocomplete = autoCompleteMap.get(txtObj.id + selectObj.id); 
    autocomplete.setSelectIdPosition(); 
    var srcElem = document.activeElement; 
    var testval = srcElem.id; 
    if (testval == selectObj.id || testval == txtObj.id) { //聚焦在当前对象 
    if (txtObj.value.length != 0) { //当input框中存在字符,则不进行任何操作 
    return; 
    } 
    var selectIdLength = selectObj.options.length; 
    if (selectIdLength > selectSize) { 
    selectObj.size = selectSize; 
    } else { 
    selectObj.size = selectIdLength; 
    } 
    selectObj.style.display = "block"; 
    } 
    } 
    var myTimeout = null; 
    /** 
    * 文本框鼠标聚焦松开事件 ,设置一个定时器,每个特定的时间执行函数,查询和input框中匹配到的select列表数据并显示 
    */
    this.txtObjKeyupEvent = function() { 
    var autocomplete = autoCompleteMap.get(txtObj.id + selectObj.id); 
    if (event.keyCode == 40) { //input框中点击键盘方向键下,这个时候不需要进行检索,只有在输入的时候触发检索事件 
    var srcElem = document.activeElement; 
    var testval = srcElem.id; 
    if (testval == txtObj.id) { 
    selectObj.focus(); 
    if (selectObj.options.length >= 1) 
    selectObj.options[0].selected = true; 
    } 
    return; 
    } 
    if (autocomplete.myTimeout != null) { //清空设置的定时执行事件 
    clearTimeout(autocomplete.myTimeout); 
    } 
    autocomplete.myTimeout = setTimeout(autocomplete.doAJAX, 200); 
    } 
    //----------------------------检索显示匹配数据----------------------------- 
    /** 
    * 做主要的查询匹配操作 
    */
    this.doAJAX = function() { 
    var autocomplete = autoCompleteMap.get(txtObj.id + selectObj.id); 
    //清空原来的OPTIONS 
    autocomplete.clearAllOptions(); 
    autocomplete.setSelectIdPosition(); 
    var inputStr = txtObj.value; 
    var arrays = autocomplete.compareInput(inputStr); //匹配符合查询条件的数据 
    if (arrays == null || arrays.length == 0) { 
    selectObj.style.display = "none"; 
    return; 
    } 
    selectObj.style.display = "block"; 
    for (var i = 0; i < arrays.length; i++) { 
    var optionParams = arrays[i].split(splitFleg); 
    var opt = new Option(); 
    opt.text = optionParams[0]; 
    opt.value = optionParams[1]; 
    selectObj.add(opt); 
    } 
    if (arrays.length > selectSize) { 
    selectObj.size = selectSize; 
    } else { 
    selectObj.size = arrays.length; 
    } 
    } 
    /** 
    * 清空原来的OPTIONS 
    */
    this.clearAllOptions = function() { 
    //清空原来的OPTIONS 
    var nL = selectObj.options.length; 
    while (nL > 0) { 
    selectObj.remove(selectObj.options.length - 1); 
    nL = selectObj.options.length; 
    } 
    } 
    //--------------------------数据检索规则--------------------- 
    /** 
    * 数据检索规则 
    * @param {String} inputStr input框中需要进行匹配的条件 
    */
    this.compareInput = function(inputStr) { 
    if (this.cacheContainer.length == 0) { 
    return; 
    } 
    inputStr = inputStr.replace(/(^[\s]*)/g, ""); //去前边空白字符串 
    inputStr = this.deleteSpecialSpace(inputStr); //去除特殊空白字符串 
    if (inputStr == null || inputStr.length == 0) { 
    return this.cacheContainer; 
    } 
    inputStr = disableSpecialCharacter(inputStr); //特殊字符处理 
    var resultArray = new Array(); 
    var k = 0; 
    var selectText = ""; 
    for (var i = 0; i < this.cacheContainer.length; i++) { 
    selectText = (this.cacheContainer[i].split(splitFleg)[0]).replace(/(^[\s]*)/g, ""); 
    selectText = this.deleteSpecialSpace(selectText); 
    if (compareRules(inputStr, selectText)) { //匹配规则 
    resultArray[k] = this.cacheContainer[i]; 
    k++; 
    } 
    } 
    return uniqueArray(resultArray); 
    } 
    /** 
    * 去除特殊空白字符串 
    */
    this.deleteSpecialSpace = function(srcStr) { 
    var temp = ""; 
    for (var i = 0; i < srcStr.length; i++) { 
    var charStr = srcStr.charAt(i); 
    // 界面特殊空格Unicode=160,此空格既不是全角,也非半角 
    if (charStr.charCodeAt(0) == 160) { 
    continue; 
    } 
    temp += charStr; 
    } 
    return temp; 
    } 
    } 
    /** 
    * @param {String} inputStr 需要进行过滤的字符 
    * 特殊字符处理 
    */
    function disableSpecialCharacter(inputStr) { 
    inputStr = inputStr.replace(new RegExp("\\\\", 'g'), "\\\\"); 
    inputStr = inputStr.replace(new RegExp("\\.", 'g'), "\\."); 
    inputStr = inputStr.replace(new RegExp("\\^", 'g'), "\\^"); 
    inputStr = inputStr.replace(new RegExp("\\{", 'g'), "\\{"); 
    inputStr = inputStr.replace(new RegExp("\\[", 'g'), "\\["); 
    inputStr = inputStr.replace(new RegExp("\\(", 'g'), "\\("); 
    inputStr = inputStr.replace(new RegExp("\\|", 'g'), "\\|"); 
    inputStr = inputStr.replace(new RegExp("\\]", 'g'), "\\]"); 
    inputStr = inputStr.replace(new RegExp("\\)", 'g'), "\\)"); 
    inputStr = inputStr.replace(new RegExp("\\*", 'g'), "\\*"); 
    inputStr = inputStr.replace(new RegExp("\\+", 'g'), "\\+"); 
    inputStr = inputStr.replace(new RegExp("\\?", 'g'), "\\?"); 
    return inputStr; 
    } 
    /** 
    * 匹配规则 
    * @param {String} inputStr input框字符,匹配条件 
    * @param {String} selectText 被匹配文字 
    */
    function compareRules(inputStr, selectText) { 
    //匹配汉字 
    return selectText.indexOf(inputStr) != -1 ; 
    } 
    /** 
    * 过滤重复数据 
    * @param {Object} arr 结果数组 
    */
    function uniqueArray(arr) { 
    if(arr == null || arr.length == 0){ 
    return arr; 
    } 
    return arr.reverse().join(",").match( /([^,]+)(?!.*\1)/ig).reverse(); 
    } 
    /** 
    * 在原来onload的基础上加上自定义要执行的函数 
    * @param {Object} func 加载函数 
    */
    function addLoadEvent(func) { 
    var oldonload = window.onload; 
    if (typeof window.onload != 'function') { 
    window.onload = func; 
    } else { 
    window.onload = function() { 
    oldonload(); 
    func(); 
    } 
    } 
    }
    引入将汉字转换成拼音的工具js
    pinYinHanZi.js
    /** 
    * 汉子转换成拼音工具js 
    */
    var key2code = { 
    65: "a", 
    66: "b", 
    67: "c", 
    68: "d", 
    69: "e", 
    70: "f", 
    71: "g", 
    72: "h", 
    73: "i", 
    74: "j", 
    75: "k", 
    76: "l", 
    77: "m", 
    78: "n", 
    79: "o", 
    80: "p", 
    81: "q", 
    82: "r", 
    83: "s", 
    84: "t", 
    85: "u", 
    86: "v", 
    87: "w", 
    88: "x", 
    89: "y", 
    90: "z", 
    49: "1", 
    50: "2", 
    51: "3", 
    52: "4", 
    53: "5", 
    54: "6", 
    55: "7", 
    56: "8", 
    57: "9", 
    48: "0"
    }; 
    var spell = { 
    0xB0A1: "a", 
    0xB0A3: "ai", 
    0xB0B0: "an", 
    0xB0B9: "ang", 
    0xB0BC: "ao", 
    0xB0C5: "ba", 
    0xB0D7: "bai", 
    0xB0DF: "ban", 
    0xB0EE: "bang", 
    0xB0FA: "bao", 
    0xB1AD: "bei", 
    0xB1BC: "ben", 
    0xB1C0: "beng", 
    0xB1C6: "bi", 
    0xB1DE: "bian", 
    0xB1EA: "biao", 
    0xB1EE: "bie", 
    0xB1F2: "bin", 
    0xB1F8: "bing", 
    0xB2A3: "bo", 
    0xB2B8: "bu", 
    0xB2C1: "ca", 
    0xB2C2: "cai", 
    0xB2CD: "can", 
    0xB2D4: "cang", 
    0xB2D9: "cao", 
    0xB2DE: "ce", 
    0xB2E3: "ceng", 
    0xB2E5: "cha", 
    0xB2F0: "chai", 
    0xB2F3: "chan", 
    0xB2FD: "chang", 
    0xB3AC: "chao", 
    0xB3B5: "che", 
    0xB3BB: "chen", 
    0xB3C5: "cheng", 
    0xB3D4: "chi", 
    0xB3E4: "chong", 
    0xB3E9: "chou", 
    0xB3F5: "chu", 
    0xB4A7: "chuai", 
    0xB4A8: "chuan", 
    0xB4AF: "chuang", 
    0xB4B5: "chui", 
    0xB4BA: "chun", 
    0xB4C1: "chuo", 
    0xB4C3: "ci", 
    0xB4CF: "cong", 
    0xB4D5: "cou", 
    0xB4D6: "cu", 
    0xB4DA: "cuan", 
    0xB4DD: "cui", 
    0xB4E5: "cun", 
    0xB4E8: "cuo", 
    0xB4EE: "da", 
    0xB4F4: "dai", 
    0xB5A2: "dan", 
    0xB5B1: "dang", 
    0xB5B6: "dao", 
    0xB5C2: "de", 
    0xB5C5: "deng", 
    0xB5CC: "di", 
    0xB5DF: "dian", 
    0xB5EF: "diao", 
    0xB5F8: "die", 
    0xB6A1: "ding", 
    0xB6AA: "diu", 
    0xB6AB: "dong", 
    0xB6B5: "dou", 
    0xB6BC: "du", 
    0xB6CB: "duan", 
    0xB6D1: "dui", 
    0xB6D5: "dun", 
    0xB6DE: "duo", 
    0xB6EA: "e", 
    0xB6F7: "en", 
    0xB6F8: "er", 
    0xB7A2: "fa", 
    0xB7AA: "fan", 
    0xB7BB: "fang", 
    0xB7C6: "fei", 
    0xB7D2: "fen", 
    0xB7E1: "feng", 
    0xB7F0: "fo", 
    0xB7F1: "fou", 
    0xB7F2: "fu", 
    0xB8C1: "ga", 
    0xB8C3: "gai", 
    0xB8C9: "gan", 
    0xB8D4: "gang", 
    0xB8DD: "gao", 
    0xB8E7: "ge", 
    0xB8F8: "gei", 
    0xB8F9: "gen", 
    0xB8FB: "geng", 
    0xB9A4: "gong", 
    0xB9B3: "gou", 
    0xB9BC: "gu", 
    0xB9CE: "gua", 
    0xB9D4: "guai", 
    0xB9D7: "guan", 
    0xB9E2: "guang", 
    0xB9E5: "gui", 
    0xB9F5: "gun", 
    0xB9F8: "guo", 
    0xB9FE: "ha", 
    0xBAA1: "hai", 
    0xBAA8: "han", 
    0xBABB: "hang", 
    0xBABE: "hao", 
    0xBAC7: "he", 
    0xBAD9: "hei", 
    0xBADB: "hen", 
    0xBADF: "heng", 
    0xBAE4: "hong", 
    0xBAED: "hou", 
    0xBAF4: "hu", 
    0xBBA8: "hua", 
    0xBBB1: "huai", 
    0xBBB6: "huan", 
    0xBBC4: "huang", 
    0xBBD2: "hui", 
    0xBBE7: "hun", 
    0xBBED: "huo", 
    0xBBF7: "ji", 
    0xBCCE: "jia", 
    0xBCDF: "jian", 
    0xBDA9: "jiang", 
    0xBDB6: "jiao", 
    0xBDD2: "jie", 
    0xBDED: "jin", 
    0xBEA3: "jing", 
    0xBEBC: "jiong", 
    0xBEBE: "jiu", 
    0xBECF: "ju", 
    0xBEE8: "juan", 
    0xBEEF: "jue", 
    0xBEF9: "jun", 
    0xBFA6: "ka", 
    0xBFAA: "kai", 
    0xBFAF: "kan", 
    0xBFB5: "kang", 
    0xBFBC: "kao", 
    0xBFC0: "ke", 
    0xBFCF: "ken", 
    0xBFD3: "keng", 
    0xBFD5: "kong", 
    0xBFD9: "kou", 
    0xBFDD: "ku", 
    0xBFE4: "kua", 
    0xBFE9: "kuai", 
    0xBFED: "kuan", 
    0xBFEF: "kuang", 
    0xBFF7: "kui", 
    0xC0A4: "kun", 
    0xC0A8: "kuo", 
    0xC0AC: "la", 
    0xC0B3: "lai", 
    0xC0B6: "lan", 
    0xC0C5: "lang", 
    0xC0CC: "lao", 
    0xC0D5: "le", 
    0xC0D7: "lei", 
    0xC0E2: "leng", 
    0xC0E5: "li", 
    0xC1A9: "lia", 
    0xC1AA: "lian", 
    0xC1B8: "liang", 
    0xC1C3: "liao", 
    0xC1D0: "lie", 
    0xC1D5: "lin", 
    0xC1E1: "ling", 
    0xC1EF: "liu", 
    0xC1FA: "long", 
    0xC2A5: "lou", 
    0xC2AB: "lu", 
    0xC2BF: "lv", 
    0xC2CD: "luan", 
    0xC2D3: "lue", 
    0xC2D5: "lun", 
    0xC2DC: "luo", 
    0xC2E8: "ma", 
    0xC2F1: "mai", 
    0xC2F7: "man", 
    0xC3A2: "mang", 
    0xC3A8: "mao", 
    0xC3B4: "me", 
    0xC3B5: "mei", 
    0xC3C5: "men", 
    0xC3C8: "meng", 
    0xC3D0: "mi", 
    0xC3DE: "mian", 
    0xC3E7: "miao", 
    0xC3EF: "mie", 
    0xC3F1: "min", 
    0xC3F7: "ming", 
    0xC3FD: "miu", 
    0xC3FE: "mo", 
    0xC4B1: "mou", 
    0xC4B4: "mu", 
    0xC4C3: "na", 
    0xC4CA: "nai", 
    0xC4CF: "nan", 
    0xC4D2: "nang", 
    0xC4D3: "nao", 
    0xC4D8: "ne", 
    0xC4D9: "nei", 
    0xC4DB: "nen", 
    0xC4DC: "neng", 
    0xC4DD: "ni", 
    0xC4E8: "nian", 
    0xC4EF: "niang", 
    0xC4F1: "niao", 
    0xC4F3: "nie", 
    0xC4FA: "nin", 
    0xC4FB: "ning", 
    0xC5A3: "niu", 
    0xC5A7: "nong", 
    0xC5AB: "nu", 
    0xC5AE: "nv", 
    0xC5AF: "nuan", 
    0xC5B0: "nue", 
    0xC5B2: "nuo", 
    0xC5B6: "o", 
    0xC5B7: "ou", 
    0xC5BE: "pa", 
    0xC5C4: "pai", 
    0xC5CA: "pan", 
    0xC5D2: "pang", 
    0xC5D7: "pao", 
    0xC5DE: "pei", 
    0xC5E7: "pen", 
    0xC5E9: "peng", 
    0xC5F7: "pi", 
    0xC6AA: "pian", 
    0xC6AE: "piao", 
    0xC6B2: "pie", 
    0xC6B4: "pin", 
    0xC6B9: "ping", 
    0xC6C2: "po", 
    0xC6CB: "pu", 
    0xC6DA: "qi", 
    0xC6FE: "qia", 
    0xC7A3: "qian", 
    0xC7B9: "qiang", 
    0xC7C1: "qiao", 
    0xC7D0: "qie", 
    0xC7D5: "qin", 
    0xC7E0: "qing", 
    0xC7ED: "qiong", 
    0xC7EF: "qiu", 
    0xC7F7: "qu", 
    0xC8A6: "quan", 
    0xC8B1: "que", 
    0xC8B9: "qun", 
    0xC8BB: "ran", 
    0xC8BF: "rang", 
    0xC8C4: "rao", 
    0xC8C7: "re", 
    0xC8C9: "ren", 
    0xC8D3: "reng", 
    0xC8D5: "ri", 
    0xC8D6: "rong", 
    0xC8E0: "rou", 
    0xC8E3: "ru", 
    0xC8ED: "ruan", 
    0xC8EF: "rui", 
    0xC8F2: "run", 
    0xC8F4: "ruo", 
    0xC8F6: "sa", 
    0xC8F9: "sai", 
    0xC8FD: "san", 
    0xC9A3: "sang", 
    0xC9A6: "sao", 
    0xC9AA: "se", 
    0xC9AD: "sen", 
    0xC9AE: "seng", 
    0xC9AF: "sha", 
    0xC9B8: "shai", 
    0xC9BA: "shan", 
    0xC9CA: "shang", 
    0xC9D2: "shao", 
    0xC9DD: "she", 
    0xC9E9: "shen", 
    0xC9F9: "sheng", 
    0xCAA6: "shi", 
    0xCAD5: "shou", 
    0xCADF: "shu", 
    0xCBA2: "shua", 
    0xCBA4: "shuai", 
    0xCBA8: "shuan", 
    0xCBAA: "shuang", 
    0xCBAD: "shui", 
    0xCBB1: "shun", 
    0xCBB5: "shuo", 
    0xCBB9: "si", 
    0xCBC9: "song", 
    0xCBD1: "sou", 
    0xCBD4: "su", 
    0xCBE1: "suan", 
    0xCBE4: "sui", 
    0xCBEF: "sun", 
    0xCBF2: "suo", 
    0xCBFA: "ta", 
    0xCCA5: "tai", 
    0xCCAE: "tan", 
    0xCCC0: "tang", 
    0xCCCD: "tao", 
    0xCCD8: "te", 
    0xCCD9: "teng", 
    0xCCDD: "ti", 
    0xCCEC: "tian", 
    0xCCF4: "tiao", 
    0xCCF9: "tie", 
    0xCCFC: "ting", 
    0xCDA8: "tong", 
    0xCDB5: "tou", 
    0xCDB9: "tu", 
    0xCDC4: "tuan", 
    0xCDC6: "tui", 
    0xCDCC: "tun", 
    0xCDCF: "tuo", 
    0xCDDA: "wa", 
    0xCDE1: "wai", 
    0xCDE3: "wan", 
    0xCDF4: "wang", 
    0xCDFE: "wei", 
    0xCEC1: "wen", 
    0xCECB: "weng", 
    0xCECE: "wo", 
    0xCED7: "wu", 
    0xCEF4: "xi", 
    0xCFB9: "xia", 
    0xCFC6: "xian", 
    0xCFE0: "xiang", 
    0xCFF4: "xiao", 
    0xD0A8: "xie", 
    0xD0BD: "xin", 
    0xD0C7: "xing", 
    0xD0D6: "xiong", 
    0xD0DD: "xiu", 
    0xD0E6: "xu", 
    0xD0F9: "xuan", 
    0xD1A5: "xue", 
    0xD1AB: "xun", 
    0xD1B9: "ya", 
    0xD1C9: "yan", 
    0xD1EA: "yang", 
    0xD1FB: "yao", 
    0xD2AC: "ye", 
    0xD2BB: "yi", 
    0xD2F0: "yin", 
    0xD3A2: "ying", 
    0xD3B4: "yo", 
    0xD3B5: "yong", 
    0xD3C4: "you", 
    0xD3D9: "yu", 
    0xD4A7: "yuan", 
    0xD4BB: "yue", 
    0xD4C5: "yun", 
    0xD4D1: "za", 
    0xD4D4: "zai", 
    0xD4DB: "zan", 
    0xD4DF: "zang", 
    0xD4E2: "zao", 
    0xD4F0: "ze", 
    0xD4F4: "zei", 
    0xD4F5: "zen", 
    0xD4F6: "zeng", 
    0xD4FA: "zha", 
    0xD5AA: "zhai", 
    0xD5B0: "zhan", 
    0xD5C1: "zhang", 
    0xD5D0: "zhao", 
    0xD5DA: "zhe", 
    0xD5E4: "zhen", 
    0xD5F4: "zheng", 
    0xD6A5: "zhi", 
    0xD6D0: "zhong", 
    0xD6DB: "zhou", 
    0xD6E9: "zhu", 
    0xD7A5: "zhua", 
    0xD7A7: "zhuai", 
    0xD7A8: "zhuan", 
    0xD7AE: "zhuang", 
    0xD7B5: "zhui", 
    0xD7BB: "zhun", 
    0xD7BD: "zhuo", 
    0xD7C8: "zi", 
    0xD7D7: "zong", 
    0xD7DE: "zou", 
    0xD7E2: "zu", 
    0xD7EA: "zuan", 
    0xD7EC: "zui", 
    0xD7F0: "zun", 
    0xD7F2: "zuo"
    }; 
    var spellArray = new Array(); 
    var pn = ""; 
    function pinyin(char) { 
    if (!char.charCodeAt(0) || char.charCodeAt(0) < 1328) 
    return char; 
    if (spellArray[char.charCodeAt(0)]) 
    return spellArray[char.charCodeAt(0)] 
    execScript("ascCode=hex(asc(\"" + char + "\"))", "vbscript"); 
    ascCode = eval("0x" + ascCode); 
    if (!(ascCode > 0xB0A0 && ascCode < 0xD7F3)) 
    return char; 
    for (var i = ascCode;(!spell[i] && i > 0);) 
    i--; 
    return spell[i]; 
    } 
    function toPinyin(str) { 
    var pStr = ""
    for (var i = 0; i < str.length; i++) { 
    if (str.charAt(i) == "\n") 
    pStr += "<br>"
    else
    pStr += "<ruby style='ruby-align:center'> " + str.charAt(i) + " <rt>" + pinyin(str.charAt(i)) + "</rt></ruby>"
    // else pStr += pinyin(str.charAt(i)) + " " 
    } 
    return pStr; 
    } 
    function toPinyinOnly(str) { 
    var pStr = ""
    for (var i = 0; i < str.length; i++) { 
    if (str.charAt(i) == "\n") 
    pStr += "<br>"
    else
    pStr += pinyin(str.charAt(i)); 
    //pStr += " " + pinyin(str.charAt(i)); 
    // else pStr += pinyin(str.charAt(i)) + " " 
    } 
    return pStr; 
    } 
    function toPinyinShengmu(str) { 
    var pStr = ""
    for (var i = 0; i < str.length; i++) { 
    if (str.charAt(i) == "\n") 
    pStr += ""; 
    else
    pStr += pinyin(str.charAt(i)).charAt(0); 
    // else pStr += pinyin(str.charAt(i)) + " " 
    } 
    return pStr; 
    } 
    function pinyinSort(a, b) { 
    var rValue = 0 
    for (var i = 0; i < a.length; i++) { 
    var pinA = pinyin(a.charAt(i)) 
    var pinB = pinyin(b.charAt(i)) 
    if (rValue = pinA > pinB ? 1 : pinA < pinB ? -1 : 0) 
    break
    } 
    return rValue 
    } 
    index.html
    [html] view plain copy 在CODE上查看代码片派生到我的代码片
    <!DOCTYPE html> 
    <html> 
    <head> 
    <meta charset="UTF-8"> 
    <title></title> 
    <script type="text/javascript" src="js/autoComplete.js"></script> 
    <script type="text/javascript" src="js/pinYinHanZi.js"></script> 
    <script type="text/javascript"> 
    //自定义规则 
    function compareRules(inputStr, selectText) { 
    //匹配汉字 和拼音 
    return selectText.indexOf(inputStr) != -1 || toPinyinShengmu(selectText).indexOf(inputStr) != -1 || 
    toPinyinOnly(selectText).indexOf(inputStr) != -1; 
    } 
    addLoadEvent(func); 
    function func() { 
    var textObj = document.getElementById("txtDisplay"); 
    var cityObj = document.getElementById("city"); 
    var autocomplete = new AutoComplete(textObj, cityObj, 10, 300); 
    autocomplete.init(); 
    } 
    </script> 
    </head> 
    <body> 
    <input type="text" id="txtDisplay" /> 
    <select id="city"> 
    <option value="1">北京</option> 
    <option value="2"> 上海</option> 
    <option value="3">广州</option> 
    <option value="5">重庆</option> 
    <option value="6">天津</option> 
    <option value="7">沈阳</option> 
    <option value="8">南京</option> 
    <option value="9">武汉</option> 
    <option value="10">长春</option> 
    <option value="11">成都</option> 
    <option value="12">大连</option> 
    <option value="13">杭州</option> 
    <option value="14">青岛</option> 
    <option value="15">济南</option> 
    <option value="16">厦门</option> 
    <option value="17">福州</option> 
    <option value="18">西安</option> 
    <option value="19">长沙</option> 
    <option value="20">哈尔滨</option> 
    </select> 
    </body> 
    </html>
    注意:该版本有一些bug和对其他(除ie)浏览器不兼容性。
    以上所述是小编给大家介绍的在IE8上JS实现combobox支持拼音检索功能的相关知识,希望对大家有所帮助
随便看

 

在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/18 14:14:48