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

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

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

    風人園

    弱水三千,只取一瓢,便能解渴;佛法無邊,奉行一法,便能得益。
    隨筆 - 99, 文章 - 181, 評論 - 56, 引用 - 0
    數(shù)據(jù)加載中……

    ECP--之彈出窗口解決方案(json傳遞)

            在應(yīng)用中,彈出式窗口選擇數(shù)據(jù),這種解決方案是很普遍的。
            彈出窗口,有兩種方式,一種是:showModalDialog,使用模式窗口,這種方式的好處有兩個地方,一、可以直接返回數(shù)據(jù),二、在最前面顯示,避免用戶誤操作,窗口被遮蔽。
            但是這種方式個人感覺比較致命的地方就是因為這個是一個對話框,在form提交的時候只能新開一個頁面(可能我沒有發(fā)現(xiàn)其他的方式)。但是也有其他的方式,如加iframe,但是這樣感覺頁面太煩了,需要兩個頁面才能實現(xiàn),比較麻煩。

            第二種:window.open,這種方式也有一個問題,就是會被當做廣告攔截掉,還算不是很致命。
    我的方案就是這個,下面上代碼。
    傳遞格式通過json,這樣我可以自己定義需要回填那些域,返回值這邊就是竟可能的完整。


    /*
    彈出窗口
    endtarget: string 目標窗口
    無返回
    */

    function fopenWindow(endtarget){
        window.open( endtarget, 
    """left=0, top=0, width=800px, height=600px, scrollbars=1, resizable=1, menubar=0, location=0, status=0, toolbar=0, " );
    }


    /*
    window.open的回調(diào)函數(shù)
    根據(jù)傳入的json格式,賦值相應(yīng)的域值

    cmp:string 域id
    retval :json 所選行的數(shù)據(jù)
    無返回
    */

    function fopenCallback(cmp, retval){
        
        
    //alert("call back start." + cmp);
        var obj = eval('(' + cmp + ')');
        
        
    for(var e in obj ){
            
    //alert(obj[e]);
            document.getElementById(obj[e]).value = retval[obj[e]]
        }

    }


    window.openCallback 
    = fopenCallback;

    /* 
    獲取url上的參數(shù)
    返回:key value 對
    */

    function GetUrlParms()    
    {
        
    var args=new Object();   
        
    var query=location.search.substring(1);//獲取查詢串   
        var pairs=query.split("&");//在逗號處斷開   
        for(var i=0;i<pairs.length;i++)   
        
    {   
            
    var pos=pairs[i].indexOf('=');//查找name=value   
            if(pos==-1)   continue;//如果沒有找到就跳過   
            var argname=pairs[i].substring(0,pos);//提取name   
            var value=pairs[i].substring(pos+1);//提取value   
            args[argname]=unescape(value);//存為屬性   
        }

        
    return args;
    }
                

    /*
    行雙擊方法,用戶選擇行數(shù)據(jù)。
    通過回調(diào)函數(shù),完成賦值,最后關(guān)閉窗口
    rtnval: string 行數(shù)據(jù)
    */

    function Dialog_onDblClick(rtnval)
    {
        
    //var rtnval = {prodId: prodId, prodName: prodName};
         
        
    var args = new Object();
        args 
    = GetUrlParms();
        
    var cmp = args['cmp']
        
        window.opener.openCallback(cmp, rtnval); 
        window.close();
    }


    主頁面 域id通過json字符串跟url傳遞后彈出頁面
    function popProductDialog(){
        var endtarget = "<%=path%>/bas/product.do?method=dialog";
        var cmp = "{a: 'prodId', b: 'prodName'}";
           //fshowModalDialog(endtarget, cmp);
          
           fopenWindow(endtarget+ "&cmp=" + cmp);
          
       }

    彈出框
    function Document_onDblClick(value1,value2)
                
    {
                    
    var rtnval = {clientId:value1, clientName:value2};    
                        Dialog_onDblClick(rtnval);

                }
    彈出頁面解析獲得域id,并通過循環(huán)域id從返回值中獲取數(shù)據(jù),并進行賦值。

    這里唯一需要變的就是,彈出頁面的返回值,可能因為需求的增加,需要返回更多的數(shù)據(jù),或者就一次性將所有數(shù)據(jù)都作為json數(shù)據(jù)返回。

    這樣客戶在調(diào)用的時候,只要域id不超出返回字段的范圍,就可以正確使用了。

    posted on 2009-08-31 10:39 風人園 閱讀(574) 評論(0)  編輯  收藏 所屬分類: ECP

    主站蜘蛛池模板: 中文字幕免费视频| 亚洲字幕AV一区二区三区四区| 亚洲精品久久久久无码AV片软件| 无码av免费一区二区三区试看| 亚洲男人的天堂在线va拉文| 色屁屁在线观看视频免费| 大学生美女毛片免费视频| 亚洲午夜电影在线观看| 亚洲精品免费在线观看| 亚洲国产美女在线观看| 成年黄网站色大免费全看| 亚洲制服中文字幕第一区| 中文字幕亚洲免费无线观看日本| 亚洲国产精品精华液| 亚洲av无码精品网站| 久久这里只精品国产免费10| 亚洲精品熟女国产| 久久久久久国产精品免费免费| 亚洲美国产亚洲AV| 日本不卡视频免费| 一进一出60分钟免费视频| 国产亚洲精品美女久久久| 久久成人a毛片免费观看网站| 亚洲av午夜精品无码专区| 国产成人免费片在线观看| 亚洲免费在线观看| 久久精品国产亚洲av麻豆色欲| 又粗又大又长又爽免费视频| 中文精品人人永久免费| 亚洲春色在线观看| 亚洲精品夜夜夜妓女网| 国产不卡免费视频| 国产精品99精品久久免费| 污污免费在线观看| 911精品国产亚洲日本美国韩国| 色窝窝免费一区二区三区 | 国产亚洲精品第一综合| 国产亚洲午夜高清国产拍精品| 91人人区免费区人人| a级毛片免费播放| 一级全免费视频播放|