javascript - 键盘控制元素移动的问题
大家讲道理
大家讲道理 2017-04-11 13:00:34
[JavaScript讨论组]

如图所示点击一个表单出现一弹出层,如何用键盘的上下左右去控制他们 上一个 下一个
我写了一个效果但是我按上下左右,返回的都是第一个,求大神指点一下。此外说明我用的是基于jq 的easyui插件

代码如下,感兴趣的看下面的完整版代码,嫌麻烦的看控制键盘上下左右的精简版代码

/**
 * combo - jQuery EasyUI
 * 
 * Licensed under the GPL:
 *   http://www.gnu.org/licenses/gpl.txt
 *
 * Copyright 2010 stworthy [ stworthy@gmail.com ] 
 * 
 * Dependencies:
 *   panel
 *   validatebox
 * 
 */
(function($){
    function setSize(target, width){
        var opts = $.data(target, 'combo').options;
        var combo = $.data(target, 'combo').combo;
        var panel = $.data(target, 'combo').panel;
         
        if (width) opts.width = width;
         
        if (isNaN(opts.width)){
            opts.width = combo.find('input.combo-text').outerWidth();
        }
        var arrowWidth = combo.find('.combo-arrow').outerWidth();
        var width = opts.width - arrowWidth;
        combo.find('input.combo-text').width(width);
         
        panel.panel('resize', {
            width: (opts.panelWidth ? opts.panelWidth : combo.outerWidth()),
            height: opts.panelHeight
        });
    }
     
    /**
     * create the combo component.
     */
    function init(target){
        $(target).hide();
         
        var span = $('').insertAfter(target);
        var input = $('').appendTo(span);
        $('').appendTo(span);
        $('').appendTo(span);
        var panel = $('

').appendTo('body'); panel.panel({ doSize:false, closed:true, style:{ position:'absolute' }, onOpen:function(){ $(this).panel('resize'); } }); var name = $(target).attr('name'); if (name){ span.find('input.combo-value').attr('name', name); $(target).removeAttr('name').attr('comboName', name); } input.attr('autocomplete', 'off'); return { combo: span, panel: panel }; } function destroy(target){ $.data(target, 'combo').panel.panel('destroy'); $.data(target, 'combo').combo.remove(); $(target).remove(); } function bindEvents(target){ var opts = $.data(target, 'combo').options; var combo = $.data(target, 'combo').combo; var panel = $.data(target, 'combo').panel; var input = combo.find('.combo-text'); var arrow = combo.find('.combo-arrow'); $(document).unbind('.combo'); combo.unbind('.combo'); panel.unbind('.combo'); input.unbind('.combo'); arrow.unbind('.combo'); if (!opts.disabled){ $(document).bind('mousedown.combo', function(e){ $('p.combo-panel').panel('close'); }); panel.bind('mousedown.combo', function(e){ return false; }); input.bind('focus.combo', function(){ showPanel(target); }).bind('mousedown.combo', function(e){ e.stopPropagation(); }).bind('keyup.combo', function(e){ switch(e.keyCode){ case 37: // left case 38: // up opts.selectPrev.call(target); break; case 39: // right case 40: // down opts.selectNext.call(target); break; case 13: // enter opts.selectCurr.call(target); break; case 27: // esc hidePanel(target); break; default: if (opts.editable){ opts.filter.call(target, $(this).val()); } } return false; }); arrow.bind('click.combo', function(){ input.focus(); }).bind('mouseenter.combo', function(){ $(this).addClass('combo-arrow-hover'); }).bind('mouseleave.combo', function(){ $(this).removeClass('combo-arrow-hover'); }); } } /** * show the drop down panel. */ function showPanel(target){ var combo = $.data(target, 'combo').combo; var panel = $.data(target, 'combo').panel; if ($.fn.window){ panel.panel('panel').css('z-index', $.fn.window.defaults.zIndex++); } panel.panel('open'); (function(){ if (panel.is(':visible')){ var top = combo.offset().top + combo.outerHeight(); if (top + panel.outerHeight() > $(window).height() + $(document).scrollTop()){ top = combo.offset().top - panel.outerHeight(); } if (top < $(document).scrollTop()){ top = combo.offset().top + combo.outerHeight(); } panel.panel('move', { left:combo.offset().left, top:top }); setTimeout(arguments.callee, 200); } })(); } /** * hide the drop down panel. */ function hidePanel(target){ var panel = $.data(target, 'combo').panel; panel.panel('close'); } function validate(target, doit){ if ($.fn.validatebox){ var opts = $.data(target, 'combo').options; var input = $.data(target, 'combo').combo.find('input.combo-text'); input.validatebox(opts); if (doit){ input.validatebox('validate'); input.trigger('mouseleave'); } } } function setDisabled(target, disabled){ var opts = $.data(target, 'combo').options; var combo = $.data(target, 'combo').combo; if (disabled){ opts.disabled = true; $(target).attr('disabled', true); combo.find('.combo-value').attr('disabled', true); combo.find('.combo-text').attr('disabled', true); } else { opts.disabled = false; $(target).removeAttr('disabled'); combo.find('.combo-value').removeAttr('disabled'); combo.find('.combo-text').removeAttr('disabled'); } } function clear(target){ var combo = $.data(target, 'combo').combo; combo.find('input.combo-value:gt(0)').remove(); combo.find('input.combo-value').val(''); combo.find('input.combo-text').val(''); } function getText(target){ var combo = $.data(target, 'combo').combo; return combo.find('input.combo-text').val(); } function setText(target, text){ var combo = $.data(target, 'combo').combo; combo.find('input.combo-text').val(text); validate(target, true); } function getValues(target){ var values = []; var combo = $.data(target, 'combo').combo; combo.find('input.combo-value').each(function(){ values.push($(this).val()); }); return values; } function setValues(target, values){ var opts = $.data(target, 'combo').options; var oldValues = getValues(target); var combo = $.data(target, 'combo').combo; combo.find('input.combo-value').remove(); var name = $(target).attr('comboName'); for(var i=0; i').appendTo(combo); if (name) input.attr('name', name); input.val(values[i]); } var tmp = []; for(var i=0; i

精简版代码

function bindEvents(target){
        var opts = $.data(target, 'combo').options;
        var combo = $.data(target, 'combo').combo;
        var panel = $.data(target, 'combo').panel;
        var input = combo.find('.combo-text');
        var arrow = combo.find('.combo-arrow');
         
        $(document).unbind('.combo');
        combo.unbind('.combo');
        panel.unbind('.combo');
        input.unbind('.combo');
        arrow.unbind('.combo');
         
        if (!opts.disabled){
            $(document).bind('mousedown.combo', function(e){
                $('p.combo-panel').panel('close');
            });
            panel.bind('mousedown.combo', function(e){
                return false;
            });
             
            input.bind('focus.combo', function(){
                showPanel(target);
            }).bind('mousedown.combo', function(e){
                e.stopPropagation();
            }).bind('keyup.combo', function(e){
                switch(e.keyCode){
                    case 37:   // left
                    case 38:   // up
                        opts.selectPrev.call(target);
                        break;
                    case 39:   // right
                    case 40:   // down
                        opts.selectNext.call(target);
                        break;
                    case 13:   // enter
                        opts.selectCurr.call(target);
                        break;
                    case 27:   // esc
                        hidePanel(target);
                        break;
                    default:
                        if (opts.editable){
                            opts.filter.call(target, $(this).val());
                        }
                }
                return false;
            });
             
            arrow.bind('click.combo', function(){
                input.focus();
            }).bind('mouseenter.combo', function(){
                $(this).addClass('combo-arrow-hover');
            }).bind('mouseleave.combo', function(){
                $(this).removeClass('combo-arrow-hover');
            });
        }
    }
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号