目前在做个b/s结构的erp系统,遇到一点麻烦,请教高手帮帮忙。新添加一订单,输入订单号、金额等外,其中还涉及到该订单下含有多个产品,我想要的是:输入产品编码(如前几位数字时),能够模糊带出对应的产品名称、厂家、规格列表,然后我选择其中的一条就填充到该订单的产品列表中,附参照的截图:

解决方案 »

  1.   

    其实自己控制一个div,div里面有表格等你需要的元素,内容变化时,div的display显示,通过ajax等去获取数据,然后在div中显示
      

  2.   

    以前写过一个纯js的快速查询。
    比较戳,不过思路是一致的。可以供楼主看一下。你可以用jquery改写一下。
    前台调用:
    <td width="65px" height="30px" class="left_txt2">
                                                收货人:
                                            </td>
                                            <td width="120px">
                                                <asp:TextBox ID="txt_consignee" MaxLength="10" CssClass="TextBox_Order" ForeColor="Red" Width="103px" autocomplete="off"
                                                    onclick="MouseClickChangeColor(this)" onkeyup="QuickSearch(event,this,'name',this.value)" runat="server"></asp:TextBox>
                                            </td>Js:
    //收货人 名称或地址 快速查询
    function QuickSearch(fox, bobj, type, key) {
        var URL = "../../Ajax/QuickSearch.aspx?type=" + type + "&key=" + escape(key);
        var strPostValues = xmlhttpPost(URL, null);
        var name = strPostValues.getElementsByTagName("name");
        var address = strPostValues.getElementsByTagName("address");
        var phonenumber = strPostValues.getElementsByTagName("phonenumber");
        if (name.length == 0) {
            strPostValues = "";
            oPopup = null;
            //如果原来有“divCss”这个图层,先删除这个图层
            if (document.getElementById("divCss")) {
                document.getElementById("divCss").parentNode.removeChild(document.getElementById("divCss"));
            }
            return;
        }
        var h = name.length * 20 - 5;
        if (window.ActiveXObject) {  //IE下可以用createPopup
            var str = "<table style='background:#FFF;border: 1px solid #AAAAAA;font-size:12px;width:" + bobj.clientWidth + "px;' id='tbSelect'>"
            for (var i = 0; i < name.length; i++) {
                str += "<tr style='cursor:pointer;' onmouseover=\"this.style.backgroundColor='#E7F1FA';parent.index=this.rowIndex;\" onmouseout=\"this.style.backgroundColor='#fff'\" "
                + "onclick=\"try{ConsigneeIn('" + name[i].getAttribute("value") + "','" + address[i].getAttribute("value") + "','" + phonenumber[i].getAttribute("value") + "');}catch(e){}\"  "
                + "/><td>" + ShowInfo(type, name[i].getAttribute("value"), address[i].getAttribute("value")) + "</td></tr>";
            }
            str += "</table>";
            oPopup = window.createPopup();
            index = -1
            oPopup.document.body.innerHTML = str;
            var x = event.screenX - event.offsetX;
            var y = event.screenY - event.offsetY + 20;
            var width = event.srcElement.offsetWidth;
            var height = h;
            oPopup.show(x, y, width, height);
        }
        else  //其他浏览器则选择用弹出div的方式
        {
            //如果原来有“divCss”这个图层,先删除这个图层
            if (document.getElementById("divCss")) {
                document.getElementById("divCss").parentNode.removeChild(document.getElementById("divCss"));
            }
            var str = "<table style='background:#FFF;border: 1px solid #AAAAAA;font-size:12px;width:" + bobj.clientWidth + "px;' id='tbSelect'>"
            for (var i = 0; i < name.length; i++) {
                str += "<tr style='cursor:pointer;' onmouseover=\"this.style.backgroundColor='#E7F1FA';window.index=this.rowIndex;\" onmouseout=\"this.style.backgroundColor='#fff'\" "
                + "onclick=\"try{ConsigneeIn('" + name[i].getAttribute("value") + "','" + address[i].getAttribute("value") + "','" + phonenumber[i].getAttribute("value") + "');}catch(e){}\"  "
                + "/><td>" + ShowInfo(type,name[i].getAttribute("value"),address[i].getAttribute("value")) + "</td></tr>";
            }
            str += "</table>";
            var x, y;
            if (fox.screenX != undefined) {
                x = fox.screenX - getOffset(fox).offsetX - (fox.screenX - fox.layerX) - document.documentElement.scrollLeft + 2;
                y = fox.screenY - getOffset(fox).offsetY - (fox.screenY - fox.layerY) - document.documentElement.scrollTop + 20;
            }
            else {
                var tar = fox.target;
                var pos = GetObjPos(tar);
                x = pos.x - document.documentElement.scrollLeft + 2; //  eval(tar).offsetWidth 是操作对象的宽度 比如textbox的宽度
                y = pos.y - document.documentElement.scrollTop + eval(tar).offsetHeight + 2;  //是操作对象的高度 比如textbox的高度
            }
            var width = fox.target.offsetWidth;
            var height = h;
            
            /******弹出层代码开始*********/
            //创建层
            var payment = document.createElement('div');
            // 初始化层
            payment.innerHTML = "<div id=\"divCss\" style='display:block;'>" + str + "</div>";
            payment.className = 'menu';
            // 定位层
            payment.style.cssText = 'FILTER:Alpha(opacity=85);opacity:0.95;';
            payment.style.left = x + "px";  //X轴
            payment.style.top = y + "px";  //Y轴
            payment.style.width = width;  //层宽
            payment.style.height = height;  //层高
            //显示层
            psp_flag = true;
            document.body.appendChild(payment);
            /******弹出层代码结束*********/
        }
    }CS:
    protected void Page_Load(object sender, EventArgs e)
            {
                string type = "";
                if (Request.QueryString["type"] != null)
                {
                    type = Request.QueryString["type"].ToString();
                }            string key = "";
                if (Request.QueryString["key"] != null)
                {
                    key = HttpContext.Current.Server.UrlDecode(Request.QueryString["key"].ToString());
                }            Response.ContentType = "text/xml";
                Response.ContentEncoding = Encoding.GetEncoding("utf-8");
                if (key.Equals(""))
                { Response.End(); }
                Response.Write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
                Response.Write("<keylist>\n");            OrderBLL ob = new OrderBLL();
                DataSet ds = new DataSet();
                if (type == "name")
                {
                    ds = ob.GetConsigneeInfoByName(key);
                }
                else if (type == "address")
                {
                    ds = ob.GetConsigneeInfoByAddress(key);
                }
                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    Response.Write("\t<name value=\"" + row["Name"].ToString() + "\"/>\n");
                    Response.Write("\t<address value=\"" + row["Address"].ToString() + "\"/>\n");
                    Response.Write("\t<phonenumber value=\"" + row["PhoneNumber"].ToString() + "\"/>\n");
                }            Response.Write("</keylist>");
            }
      

  3.   

    应该跟金蝶的K3 差不多吧! 不知道你环境是什么!cs bs ?
      

  4.   

    行里面存下产品的ID,当输入的时候用Js来一个keypress事件,然后用JQ的过滤器把表格中满足要求的行的背景色的标记一下    
      

  5.   

    谢谢大家了,这个系统是b/s结构的,最后我采用了div+table布局成所需要的布局样子,然后利用ajax来进行数据的调取和保存。