原来的JS代码:
<script>
       $(function () {
        var pop = $('#pop'), trs = pop.find('tr'), v, input, find = false;
        pop.find('tr').click(function (e) {
            var inputs = $(input).closest('tr').find('input');
            inputs.eq(0).val(this.cells[0].innerHTML);
            inputs.eq(1).val(this.cells[1].innerHTML);
            inputs.eq(2).val(this.cells[2].innerHTML);
            inputs.eq(3).val(this.getAttribute('d_time'));
            pop.hide();
        });
       $('#table1 td:nth-child(1) input').attr('autocomplete', 'off').click(function (e) {
            input = this;
            var p = $(this).offset();
            pop.css({ left: p.left, top: p.top + this.offsetHeight });
        }).keyup(function (e) {
            if (e.keyCode == 13) return;
            if (e.keyCode == 38 || e.keyCode == 40) {//上下键
                e.preventDefault();
                var tr = trs.filter('.focus'), up = e.keyCode == 38;
                if (tr.size() == 0) trs.filter(up ? ':last' : ':first').addClass('focus');
                else {
                    tr.removeClass('focus');
                    tr = tr[up ? 'prev' : 'next']();
                    if (tr.size() == 0) tr = trs.filter(up ? ':last' : ':first');
                    tr.addClass('focus');
                }
                return;
            }
            v = this.value;
            find = false;
            if (v != '') {
                trs.removeClass('focus').each(function () {
                    if (this.cells[0].innerHTML.indexOf(v) == 0) {
                        this.style.display = ''; find = true;
                        if (this.cells[0].innerHTML == v) { this.className = 'focus'; return false; }
                    } else this.style.display = 'none';
                });
            }
            pop[find ? 'show' : 'hide']();
        }).keydown(function (e) {
            if (e.keyCode == 13) {
                e.preventDefault(); //阻止表单提交
                var tr = pop.find('tr.focus');
                if (tr.size() > 0) tr.eq(0).trigger('click');
            }
        });
        $(document).click(function (e) { pop.hide(); });
    });
</script>

解决方案 »

  1.   

    没考虑到中间有隐藏的。。js改成这样的。。
    $(function () {
            var pop = $('#pop'), alltrs = pop.find('tr'), trs, v, input, find = false;
            pop.find('tr').click(function (e) {
                var inputs = $(input).closest('tr').find('input');
                inputs.eq(0).val(this.cells[0].innerHTML);
                inputs.eq(1).val(this.cells[1].innerHTML);
                inputs.eq(2).val(this.cells[2].innerHTML);
                inputs.eq(3).val(this.getAttribute('d_time'));
                pop.hide();
            });
            $('#table1 td:nth-child(1) input').attr('autocomplete', 'off').click(function (e) {
                input = this;
                var p = $(this).offset();
                pop.css({ left: p.left, top: p.top + this.offsetHeight });
            }).keyup(function (e) {
                if (e.keyCode == 13) return;
                trs = trs || alltrs;
                if (e.keyCode == 38 || e.keyCode == 40) {//上下键
                    e.preventDefault();
                    var tr = trs.filter('.focus'), up = e.keyCode == 38;
                    if (tr.size() == 0) trs.filter(up ? ':last' : ':first').addClass('focus');
                    else {
                        tr.removeClass('focus');
                        ////////////////////////////////
                        for (var i = 0; i < trs.length; i++) {
                            if (trs[i] == tr[0]) { i += up ? -1 : 1; break; }
                        }
                        tr = trs.eq(i);
                        if (tr.size() == 0) tr = trs.eq(up ? trs.size() - 1 : 0);
                        ////////////////////////////////
                        tr.addClass('focus');
                    }
                    return;
                }
                v = this.value;
                find = false;
                if (v != '') {
                    alltrs.removeClass('focus').each(function () {
                        if (this.cells[0].innerHTML.indexOf(v) == 0) {
                            this.style.display = ''; find = true;
                            if (this.cells[0].innerHTML == v) { this.className = 'focus'; return false; }
                        } else this.style.display = 'none';
                    });
                }
                trs = alltrs.filter(':visible');/////////////
                pop[find ? 'show' : 'hide']();        }).keydown(function (e) {
                if (e.keyCode == 13) {
                    e.preventDefault(); //阻止表单提交
                    var tr = pop.find('tr.focus');
                    if (tr.size() > 0) tr.eq(0).trigger('click');
                }
            });
            $(document).click(function (e) { pop.hide(); });
        });
    不想改js的话可以改下读数据库时的排序,将前缀相同的排序下 rs.open "select * from d_info order by d_code",conn,1,1
      

  2.   


    谢谢版主,是不是从速度上来说,直接 order by会比JS控制要好一些。
      

  3.   

    order by 只是让数据归类显示,控制差不多。。归类后用原来的代码还是有问题,用最新发的这个没有问题
      

  4.   


    谢谢,我也试了,order by 后在显示的改组数据之后还是有空档的问题,用了版主的最新的,一切正常。