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

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

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

    Java海闊天空

    編程是我的生活,但生活不僅僅是編程。

    使用jQuery模擬Google的自動(dòng)提示效果

    注意:

    1、本功能使用SqlServler2000中的示例數(shù)據(jù)庫(kù)Northwind,請(qǐng)打SP3或SP4補(bǔ)丁;
    2、請(qǐng)下載jQuery組件,河西FTP中有下載;
    3、本功能實(shí)現(xiàn)類似Google自動(dòng)提示的效果,通過(guò)ajax引擎從服務(wù)器獲取,返回XML數(shù)據(jù);
    4、本示例程序沒考慮性能問題;
    5、不支持Firefox瀏覽器,因?yàn)樵摓g覽器沒有propertychange事件。

    步驟:

    1、創(chuàng)建一個(gè)名為GoogleServlet的Servlet,負(fù)責(zé)從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)并生成XML格式的數(shù)據(jù)。

    package com.aptech.servlet;

    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class GoogleServlet extends HttpServlet {

        public void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setContentType("text/xml;charset=utf-8");
            request.setCharacterEncoding("utf-8");
            PrintWriter out = response.getWriter();
            String key = request.getParameter("key");
            try {
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                Connection conn = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1:1433;DatabaseName=northwind", "sa", "");
                PreparedStatement pstmt = conn.prepareStatement("select shipname, count(shipname) as c from [orders] where shipname like ? group by shipname");
                pstmt.setString(1, key + "%");
               
                ResultSet rs = pstmt.executeQuery();
               
                StringBuilder xml = new StringBuilder();
                xml.append("<results>");
                if(rs != null){
                    while(rs.next()){
                        xml.append("<result key=""" + rs.getString(1) + """ count=""" + rs.getInt(2) + """></result>");
                    }
                }
                xml.append("</results>");
                rs.close();
                pstmt.close();
                conn.close();
               
                out.print(xml.toString());
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           
           
            out.flush();
            out.close();
        }
    }

    2、定義一個(gè)名為google.html的HTML文件,負(fù)責(zé)動(dòng)態(tài)生成自動(dòng)提示的效果。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>google.html</title>
       
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <script type="text/javascript" src="jquery-1.2.6.pack.js"></script>

        <script type="text/javascript">
            var line = 0;
           
            function del(){
                if($("#newDiv")){
                    $("#newDiv").remove();
                    line = 0;
                }
            }
       
            $(document).ready(function(){
                //文本框失去焦點(diǎn)時(shí)層消失
                $(document.body).click(function(){
                    del();
                });
               
                $(document).keydown(function(){
                    // 38 上  40下 13 回車
                    if($("#newDiv")){
                        if(event.keyCode == 40){
                            $("table tbody tr").eq(line)
                                .css("backgroundColor", "blue")
                                .css("color", "white");
                            $("table tbody tr").eq(line < 0 ? 0 : line - 1)
                                .css("backgroundColor", "white")
                                .css("color", "black");
                            line = (line == $("table tbody tr").length ? 0 : line + 1);
                        }else if(event.keyCode == 38){
                            line = (line == 0 ? $("table tbody tr").length : line - 1);
                            $("table tbody tr").eq(line)
                                .css("backgroundColor", "blue")
                                .css("color", "white");
                            $("table tbody tr").eq(line > $("table tbody tr").length ? 0 : line + 1)
                                .css("backgroundColor", "white")
                                .css("color", "black");
                        }else if(event.keyCode == 13){
                            $("#key").val($("table tbody tr").eq(line - 1).find("td").eq(0).html());
                            del();
                        }
                    }   
                });
           
                $("#key").bind("propertychange", function(){
                    del();
               
                    var top = $("#key").offset().top;
                    var left = $("#key").offset().left;
                    var newDiv = $("<div/>").width($("#key").width() + 6)
                        .css("position", "absolute")
                        .css("backgroundColor", "white")
                        .css("left", left)
                        .css("top", top + $("#key").height() + 6)
                        .css("border", "1px solid blue")
                        .attr("id", "newDiv");
                       
                    var table = $("<table width='100%'/>")
                        .attr("cellpadding", "0")
                        .attr("cellspacing", "0");
                       
                    $.post("GoogleServlet", {key: $("#key").val()}, function(xml){
                        $(xml).find("results result").each(function(){
                            var key = $(this).attr("key");
                            var count = $(this).attr("count");
                           
                            var tr = $("<tr/>").css("cursor", "pointer").mouseout(function(){
                                $(this).css("backgroundColor", "white").css("color", "black");
                            }).mouseover(function(){
                                $(this).css("backgroundColor", "blue").css("color", "white");
                            }).click(function(){
                                $("#key").val($(this).find("td").eq(0).html());
                               
                                del();
                            });
                            var td1 = $("<td/>").html(key).css("fontSize", "12px")
                                .css("margin", "5 5 5 5");
                            var td2 = $("<td/>").html("共有" + count + "個(gè)結(jié)果")
                                .attr("align", "right").css("fontSize", "12px")
                                .css("color", "green").css("margin", "5 5 5 5");
                           
                            tr.append(td1).append(td2);
                            table.append(tr);
                            newDiv.append(table);
                        });
                    });
                   
                    $(document.body).append(newDiv);
                   
                    if($("#key").val() == ""){
                        $("#newDiv").remove();
                    }               
                });
            });
        </script>
      </head>
     
      <body>
        <h1>Google搜索</h1>
        <div style="margin-top: 20px; margin-left: 30px">
            請(qǐng)輸入搜索關(guān)鍵字:<input name="key" id="key" style="width: 300">
        <input type="button" value="Goolge一下">
        </div>
      </body>
    </html>

    3、最后的效果:

    posted on 2008-08-05 19:06 李贊紅 閱讀(8817) 評(píng)論(3)  編輯  收藏

    評(píng)論

    # re: 使用jQuery模擬Google的自動(dòng)提示效果 2008-08-05 20:14 Fyun Li

    不錯(cuò),用jquery autocomplete plugin也能實(shí)現(xiàn)  回復(fù)  更多評(píng)論   

    # re: 使用jQuery模擬Google的自動(dòng)提示效果 2008-09-08 13:30 怨靈

    我用eclipse xml.append("<result key=""" + rs.getString(1) + """ count=""" + rs.getInt(2) + """></result>");
    報(bào)錯(cuò) ~~希望樓主賜教··  回復(fù)  更多評(píng)論   

    # re: 使用jQuery模擬Google的自動(dòng)提示效果 2009-05-07 16:00 咔嚓

    行不行啊老兄 放一個(gè)跑不了的代碼在這、、  回復(fù)  更多評(píng)論   


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    <2008年8月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    統(tǒng)計(jì)

    常用鏈接

    留言簿(12)

    隨筆檔案(28)

    相冊(cè)

    技術(shù)友情博客

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 久九九精品免费视频| a级亚洲片精品久久久久久久| 亚洲大码熟女在线观看| 亚洲av日韩片在线观看| 天黑黑影院在线观看视频高清免费| 天堂在线免费观看| 亚洲电影唐人社一区二区| 久久久久久国产精品免费免费 | 国产黄色片在线免费观看| 一区二区三区免费视频播放器| 日本高清色本免费现在观看| 国产黄色片免费看| 亚洲精品美女在线观看| 国产麻豆免费观看91| 久久午夜无码免费| 色窝窝亚洲av网| 久久亚洲精品中文字幕| 国产免费观看黄AV片| 亚洲视频在线观看免费| WWW国产亚洲精品久久麻豆| 亚洲国产高清视频| 国产一级高清免费观看| 67194国产精品免费观看| 国产成人亚洲午夜电影| 99亚洲精品高清一二区| 亚洲国产人成精品| 免费看韩国黄a片在线观看| 国产黄在线播放免费观看| 亚洲欧美日韩中文二区| 亚洲Aⅴ无码专区在线观看q| 四虎影永久在线高清免费| 51视频精品全部免费最新| 亚洲精品偷拍视频免费观看| 亚洲人成综合网站7777香蕉| 亚洲成在人天堂在线| 免费大黄网站在线观| 毛片免费视频观看| **aaaaa毛片免费| 你懂得的在线观看免费视频| 美女免费精品高清毛片在线视| 亚洲精品亚洲人成在线麻豆|