﻿$(function() {
    function getTop(index,top) {
        if (top < 0) {
            return index * 30;
        } else if (top >= 300) {
            return (index - 9) * 30;
        }
    }
    function getAdd(index, keyCode) {
        if (keyCode == 40) {
            return ++index;
        }
        return --index;
    }
    $("#search").keydown(function(e) {
        if (e.keyCode == 40 || e.keyCode == 38) {
            var index = getAdd($("a.selected").removeClass().index(),e.keyCode);
            if (index>=$(".list>a").length) {
                index=0;
            }
            var top = $(".list>a").eq(index).addClass("selected").position().top;
            $(".list").scrollTop(getTop(index,top));
        }
        if (e.keyCode == 13) {
            $("a.selected").click();
        }
    });
    $(".list").on("mouseenter click","a",function(e) {
        if (e.type=="click") {
            $("#search").val($("a.selected").text());
            $(".list").hide();
        } else {
            $("a.selected").removeClass();
            $(this).addClass("selected");            
        }
    });
    $("#search").keyup(function(e) {
        if (e.keyCode != 40 && e.keyCode != 38 && e.keyCode != 13) {
            var value = $(this).val().trim();
            if (value) {
                $.getJSON("http://tw.somee.com/demo/4-4/data.ashx", {
                    search: value
                }, function(data) {
                    if (data.length > 0) {
                        var html = "";
                        for (var i = 0; i < data.length; i++) {
                            html += "<a>" + data[i] + "</a>";
                        }
                        $(".list").html(html).show();
                    } else {
                        $(".list").hide();
                    }
                });
            } else {
                $(".list").hide();
            }
        }
    });
});
@@ -5,24 +5,218 @@
 unction() %7B%0A
+    function getIndex(index,length) %7B%0A        if (index %3C 0) %7B%0A            index = length - 1;%0A        %7D else if (index %3E= length) %7B%0A            index = 0;%0A        %7D%0A        return index;%0A    %7D%0A
     function
@@ -232,24 +232,24 @@
 ndex,top) %7B%0A
-
         if (
@@ -318,12 +318,11 @@
 op %3E
-= 30
+ 27
 0) %7B
@@ -505,24 +505,28 @@
 index;%0A    %7D
+    
 %0A    $(%22#sea
@@ -627,23 +627,16 @@
 index = 
-getAdd(
 $(%22a.sel
@@ -664,16 +664,50 @@
 .index()
+;%0A            index = getAdd(index
 ,e.keyCo
@@ -728,18 +728,30 @@
    i
-f 
+ndex = getIndex
 (index
-%3E=
+,
 $(%22.
@@ -770,49 +770,9 @@
 gth)
- %7B%0A                index=0;%0A            %7D
+;
 %0A   

test 10