<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我玩Ajaxtags(autocomplete)

    Posted on 2006-01-17 23:11 JavaXP 閱讀(4667) 評論(17)  編輯  收藏 所屬分類: 實戰經驗

    昨天下午突然接到公司通知,以前處理的XX物資系統的部門,班組,工程,供應廠商部分都需要修改成Ajaxtags的autocomplete來完成,用戶需要輸入查詢碼來進行索引,于是開始動手研究Ajaxtags.
    Ajaxtags是基于prototype.js的簡化AJAX開發的組件,可以通過標簽來來完成以前非常復雜的事情.
    通過DOME和原代碼的分析,我感覺,他的簡化過于局限,沒有非常好擴展性,只能做一些簡單的處理,比方他的AjaxXmlBuilder的toString()方法可以返回一種簡單的XML格式,而且過于簡單:

    <?xml version="1.0" encoding="UTF-8"?>
    <ajax-response>
      
    <response>
        
    <item>
          
    <name>Record 1</name>
          
    <value>1</value>
        
    </item>
        
    <item>
          
    <name>Record 2</name>
          
    <value>2</value>
        
    </item>
        
    <item>
          
    <name>Record 3</name>
          
    <value>3</value>
        
    </item>
      
    </response>
    </ajax-response>

    他在autocomplete處理時會用到這中XML文件:
    以下是在他的JS中解析XML的部分
         var name = items[i].getElementsByTagName("name")[0].firstChild.nodeValue;
          
    var value = items[i].getElementsByTagName("value")[0].firstChild.nodeValue;
    由此可以看出他過于簡單,如果我有多個屬性需要放入自動下拉菜單中怎么辦?
    好辦,我們擴展!
    自己造一個AjaxXmlBuilder,繼承一下就可以了,把toString()方法重載掉~讓他組一個我要的XML文件出來,然后再到頁面上自己解吸他`就OK了~
    我的類:
    package com.kaiwang.mmis.ajax.autoselect;

    import java.lang.reflect.InvocationTargetException;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    import java.util.List;

    import org.ajaxtags.helpers.AjaxXmlBuilder;
    import org.apache.commons.beanutils.BeanUtils;

    /**
     * 重載ajaxxmlbuilder封裝出新的xml文件
     * 
    @author Gary.lee Jan 16, 2006
     
    */

    public class ManufacturerXmlBuilder extends AjaxXmlBuilder implements MisAjaxXmlBuilder  {
        
        
    private String encoding = "UTF-8";
        
    private List items = new ArrayList();
        
        
    public ManufacturerXmlBuilder addItems(Collection collection, String nameProperty, String valueProperty, String seachCodeProperty) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
            
    for (Iterator iter = collection.iterator(); iter.hasNext();) {
                Object element 
    = (Object) iter.next();
                String name 
    = BeanUtils.getProperty(element, nameProperty);
                String value 
    = BeanUtils.getProperty(element, valueProperty);
                String seachCode 
    = BeanUtils.getProperty(element, seachCodeProperty);
                items.add(
    new MisAjaxBaseItem(name, value, seachCode));
              }

            
    return this;
        }


        
    /**
         * 
    @see java.lang.Object#toString()
         
    */

        
    public String toString() {
          StringBuffer xml 
    = new StringBuffer().append("<?xml version=\"1.0\"");
          
    if (encoding != null{
            xml.append(
    " encoding=\"");
            xml.append(encoding);
            xml.append(
    "\"");
          }

          xml.append(
    " ?>");

          xml.append(
    "<ajax-response>");
          xml.append(
    "<response>");
          
    for (Iterator iter = items.iterator(); iter.hasNext();) {
           MisAjaxBaseItem item 
    = (MisAjaxBaseItem) iter.next();
          xml.append(
    "<item>");
          xml.append(
    "<name>"); 
          xml.append(
    "<![CDATA[");
          xml.append(item.getName());
          xml.append(
    "]]>");
          xml.append(
    "</name>");
          xml.append(
    "<value>");
          xml.append(
    "<![CDATA[");
          xml.append(item.getId());
          xml.append(
    "]]>");
          xml.append(
    "</value>");
          xml.append(
    "<searchcode>");
          xml.append(
    "<![CDATA[");
          xml.append(item.getSearchCode());
          xml.append(
    "]]>");
          xml.append(
    "</searchcode>");
            xml.append(
    "</item>"); 
          }

          xml.append(
    "</response>");
          xml.append(
    "</ajax-response>");
          
    return xml.toString();
        }

    }


    這樣就有了我要的XML文件格式了~再修改JS
          var name = items[i].getElementsByTagName("name")[0].firstChild.nodeValue;
          
    var value = items[i].getElementsByTagName("value")[0].firstChild.nodeValue;
          
          
    //新增加一個searchcode部分的解析
          var searchCode = items[i].getElementsByTagName("searchcode")[0].firstChild.nodeValue;
          
          
    var li = document.createElement("li");
          
    var liIdAttr = document.createAttribute("id");
          li.setAttribute(
    "id", value);
          
    //將searchcode部分+name輸出到文本區域中
          var liText = document.createTextNode(name+'('+searchCode+')');
    大家可以看到,我加入了一個searchCode的東西就是在下拉框中把searchCode打印出來!
    效果~~~~~~我抓張圖出來看看:

    樣子還可以吧`!
    用過autocomplete的朋友應該知道如果僅僅是鼠標點擊以后這個框是不會出來了~
    因為他默認的事件是"keyup",也就是當有輸入的時候才出來.初始化的部分在JS中:
     setOptions: function(options) {
        
    this.options = {
          sourceElem: $(options.source),
          targetElem: $(options.target),
          eventType: options.eventType 
    ? options.eventType : "keyup",
          appendValue: evalBoolean(options.appendValue),
          appendSeparator: options.appendSeparator 
    || " ",
          forceSelection: evalBoolean(options.forceSelection)
        }
    .extend(options || {});
    而且這里如果換成"force"的話,在下拉框中的上下鍵和回車就失效了,沒關系!解決了!在調用的時候把eventType:"focus"   加上(這個屬性官方文檔中并沒有說~)然后找到:
     attachBehaviors: function(element, event, listener, obj) {
        
    if (isArray(element)) {
          
    for (var i=0; i<element.length; i++{
            eval(
    "element[i].on"+event+" = listener.bindAsEventListener(obj)");
          }

        }
     else {
          eval(
    "element.on"+event+" = listener.bindAsEventListener(obj)");
          eval(
    "element.onkeyup = listener.bindAsEventListener(obj)");
        }

      }
    大家可以看到我在下面又追加了一個“keyup”的屬性,這樣既在得到焦點的時候可以出來,也可以在用上下建的時候選擇,還可以做篩選~還有就是我沒有實用標簽,我讀了它的DOME以后發現它僅僅是封裝了JS而已,用了標簽以后感覺怪怪的,為什么JS的調用也要用標簽封裝呢?僅僅是可以在標簽中實用EL語法·但是又有多少兄弟會用呢?最主要的是它的標簽中好想沒有“eventType”這個屬性~,看看我的調用:
    //班站編號
    new AjaxJspTag.Autocomplete("<%=request.getContextPath()%>/autoSelectTeam.do"{
                                                parameters:
    "team={team_Name},depId={department_Id}",
                                                progressStyle:
    "throbbing",
                                                target:
    "team_Id",
                                                className:
    "autocomplete",
                                                source:
    "team_Name",
                                                forceSelection:
    "yes",
                                                eventType:
    "focus"            
    }
    );

    要注意的是parameters這里多參數實用了,號隔開,這樣到ACTION中就可以用depId接到值了~這個東西在官方文檔中也沒有說出來,還是同事發現的~!

    本人文采不行``大家見諒,希望文章對用ajaxTags的朋友有寫幫助,我的原則就是·能改的我都改·只要我能用就可以了!

    我再改~前面說了,我修改了AJAX基本的JS文件``但是他的其他屬性就不能用了~~~很痛苦,所以晚上突然想到,我專門為他加一個方法就可以了~

    //事件觸發(修改增加一個keyup事件auto專用)
      attachBehaviorsAuto: function(element, event, listener, obj) {
          eval(
    "element.on"+event+" = listener.bindAsEventListener(obj)");
          eval(
    "element.onkeyup = listener.bindAsEventListener(obj)");
      }

    再改一下`他調用的地方,換成這個方法就好了`噎!

    Feedback

    # re: 我玩Ajaxtags(autocomplete)  回復  更多評論   

    2006-01-20 16:23 by 過客007
    好深奧……

    # re: 我玩Ajaxtags(autocomplete)  回復  更多評論   

    2006-01-21 23:14 by fd
    你所說的不用去該都能夠實現,只要在頁面加上自己定義的js

    # re: 我玩Ajaxtags(autocomplete)  回復  更多評論   

    2006-08-15 17:44 by 菜鳥!!!
    請教樓主
    這個解析函數,在那個文件里,希望指點指點
    var name = items[i].getElementsByTagName("name")[0].firstChild.nodeValue;
    var value = items[i].getElementsByTagName("value")[0].firstChild.nodeValue;

    # re: 我玩Ajaxtags(autocomplete)  回復  更多評論   

    2007-02-03 18:35 by Janny
    很好,道理很易懂,只是實際工作中經常管不住自己。看來需要經常提醒自己。
    謝謝!

    # re: 我玩Ajaxtags(autocomplete)  回復  更多評論   

    2007-04-21 20:59 by der
    <a href="http://www.shjp8.com">上海機票</a>,
    <a href="http://www.shjp8.com">上海打折機票</a>,
    <a href="http://www.dogstoreol.com">Dog Clothes</a> ,
    <a href="http://www.chongqing-life.com">chongqing</a>,
    <a href="http://www.yantai-life.com">yantai</a>,
    <a href="http://blog.hc360.com/ltg110">google左側排名</a>,
    <a href="http://sr321.blog.com.cn">google左側排名</a>,
    <a href="http://blog.5d.cn/user33/sr321">google左側排名</a>,
    <a href="http://sr321.blog.ccidnet.com">google左側排名</a>,
    <a href="http://blog.yesky.com/blog/sr321">google左側排名</a>,
    <a href="http://sr321.blog.soufun.com ">google左側排名</a>,
    <a href="http://googlefff.bokee.com">google左側排名</a>,
    <a href="http://mzyy888.blog.163.com">google排名優化</a>,
    <a href="http://blog.zol.com.cn/googleleft">google排名優化</a>,
    <a href="http://baidu-google.blog.sohu.com">google排名優化</a>,
    <a href="http://baidu-google.blog.sohu.com">google排名優化</a>,
    <a href="http://blog.sina.com.cn/u/1276417342">google排名優化</a>,
    <a href="http://mzyy888.blog.china.alibaba.com/">google排名優化</a>,
    <a href="http://blog.focus.cn/myblog/20291110.html">google左側排名</a>,
    <a href="http://ltg110.blog.hexun.com/">google排名</a>,
    <a href="http://www.sr321.com/">google左側排名</a>,
    <a href="http://www.sr321.net/">google左側排名</a>,
    <a href="http://www.google2007.com/">google左側排名</a>,

    # Pearl Jewelry  回復  更多評論   

    2007-06-22 19:46 by asdfdas
    asdfadf

    # Pearl Jewelry  回復  更多評論   

    2007-06-22 19:46 by Pearl Jewelry
    adfadsf

    # loose bead wholesale  回復  更多評論   

    2007-06-22 19:48 by loose bead wholesale
    adfadsfads

    # wholesale jewellery  回復  更多評論   

    2007-06-22 19:48 by wholesale jewellery
    adfadsfadsfad

    # wholesale bead  回復  更多評論   

    2007-06-22 19:49 by wholesale bead
    asdfasdf

    # wholesale pearls  回復  更多評論   

    2007-06-22 19:49 by wholesale pearls
    afafasdfasdfasdf

    # wholesale pearl  回復  更多評論   

    2007-06-22 19:50 by wholesale pearl
    adfasdfadsf

    # re: 我玩Ajaxtags(autocomplete) www.googleah.cn  回復  更多評論   

    2007-08-30 22:00 by www.googleah.cn
    專業從事GOOGLE左側、GOOGLE左側排名等搜索引擎優化服務,有多年實踐經驗,價格實惠,有需要的朋友可以登陸http://www.googleah.cn或者來電聯系:0571-81562921,以及在線聯系QQ:76312063,相信選擇我們是你明智的選擇。需要做友情鏈接交換的朋友也可以聯系我www.haohome.com www.qjtogo.com www.luan.ah.cn www.21xcn.com

    # re: 我玩Ajaxtags(autocomplete) www.googleah.cn  回復  更多評論   

    2007-10-30 18:49 by www.googleah.cn
    專業從事GOOGLE左側、GOOGLE左側排名等搜索引擎優化服務,有多年實踐經驗,價格實惠,有需要的朋友可以登陸http://www.googleah.cn或者來電聯系:0571-81562921,以及在線聯系QQ:76312063,相信選擇我們是你明智的選擇。需要做友情鏈接交換的朋友也可以聯系我www.haohome.com www.qjtogo.com www.luan.ah.cn www.21xcn.com

    # re: 我玩Ajaxtags(autocomplete)  回復  更多評論   

    2008-02-23 14:17 by runescape money
    eeee

    # re: 我玩Ajaxtags(autocomplete)  回復  更多評論   

    2008-02-23 14:17 by runescape gold
    wwww

    # 求助[未登錄]  回復  更多評論   

    2008-07-15 10:10 by 冰川
    你好,我也在改Ajaxtags(autocomplete),想請求你的幫助,問題如下:

    我的頁面需要自動完成的部分,一個(inputA)在頁面頂部,一個(inputB)在頁面底部,A肯定是沒問題了,但B就不行,自動完成的部分看不到了,所以想修改代碼,讓A朝下,而B朝上。

    在那幾個js文件中,哪部分是控制它們的位置的?

    樂意幫助的話,請致信:yanlei_bctn@qq.com

    posts - 19, comments - 31, trackbacks - 0, articles - 2

    Copyright © JavaXP

    主站蜘蛛池模板: 美女视频黄频a免费观看| 亚洲精品麻豆av| 亚洲精品无码不卡| 国产日韩久久免费影院 | 久久久久亚洲av成人无码电影| 亚洲AV无码一区二区乱子仑 | 美女网站免费福利视频| 中文字幕亚洲色图| 最近2019免费中文字幕6| 亚洲自偷精品视频自拍| 97国产免费全部免费观看| 亚洲AV无码无限在线观看不卡 | 日韩视频在线精品视频免费观看| 亚洲综合图片小说区热久久| 99视频在线看观免费| 亚洲精品亚洲人成在线麻豆| 一个人看www在线高清免费看| ASS亚洲熟妇毛茸茸PICS| 在线成人a毛片免费播放| 老司机亚洲精品影院在线观看| 亚洲男人的天堂在线va拉文| 日本三级在线观看免费| 久久亚洲免费视频| 青春禁区视频在线观看直播免费| 亚洲区日韩精品中文字幕| 亚洲不卡AV影片在线播放| 免费人成网站在线观看不卡| 亚洲冬月枫中文字幕在线看| 国产一级一片免费播放i| 成人国产精品免费视频| 亚洲成在人线电影天堂色| 日韩成人免费视频播放| 亚洲精品偷拍视频免费观看| 久久久久亚洲AV无码麻豆| 免费涩涩在线视频网| 丝瓜app免费下载网址进入ios| 亚洲成AV人片久久| 亚洲AⅤ永久无码精品AA| 人妻无码一区二区三区免费| 亚洲高清中文字幕| 成人爱做日本视频免费|