首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从软键虚拟键盘键入最多10个字符

从软键虚拟键盘键入最多10个字符
EN

Stack Overflow用户
提问于 2017-12-14 15:00:25
回答 1查看 181关注 0票数 0

当我使用虚拟键盘时,我在设置最大文本长度时遇到了问题。当我在普通键盘上打字时,文本的最大长度是10个字符(使用输入字段中的最大长度),但是当我开始使用虚拟键盘时,我可以输入我想要的字符数。如何从虚拟键盘键入最大长度为10个字符的文本。请帮帮忙。这是虚拟键盘的JS代码。我知道我需要在这段代码中设置var,但是我是jQuery新手,这对我来说很难。

代码语言:javascript
复制
(function ($) {

$.fn.softkeys = function(options) {

    var settings = $.extend({
            layout : [],
            target : '',
            rowSeperator : 'br',
            buttonWrapper : 'li'
        },  options);

    var createRow = function(obj, buttons) {
            for (var i = 0; i < buttons.length; i++) {
                createButton(obj, buttons[i]);

            }

            obj.append('<'+settings.rowSeperator+'>');
        },

        createButton = function(obj, button) {
            var character = '',
                type = 'letter',
                styleClass = '';

            switch(typeof button) {
                case 'array' :
            case 'object' :
                    if(typeof button[0] !== 'undefined') {
                        character += '<span>'+button[0]+'</span>';
                    }
                    if(typeof button[1] !== 'undefined') {
                        character += '<span>'+button[1]+'</span>';
                    }
                    type = 'symbol';
                    break;

                case 'string' :
                    switch(button) {
                        case 'capslock' :
                            character = '<span>caps</span>';
                            type = 'capslock';
                            break;

                        case 'shift' :
                            character = '<span>shift</span>';
                            type = 'shift';
                            break;

                        case 'return' :
                            character = '<span>return</span>';
                            type = 'return';
                            break;

                        case 'reset' :
                            character = '<span>reset</span>';
                            type = 'reset';
                            break;

                        case 'tab' :
                            character = '<span>tab</span>';
                            type = 'tab';
                            break;

                        case 'space' :
                            character = '<span>space</span>';
                            type = 'space';
                            styleClass = 'softkeys__btn--space';
                            break;

                        case 'delete' :
                            character = '<span>delete</span>';
                            type = 'delete';
                            break;

                        default :
                            character = button;
                            type = 'letter';
                            break;
                    }

                    break;
            }

            obj.append('<'+settings.buttonWrapper+' class="softkeys__btn  
'+styleClass+'" data-
type="'+type+'">'+character+'</'+settings.buttonWrapper+'>');
        },

        bindKeyPress = function(obj) {
            obj.children(settings.buttonWrapper).on('click touchstart', 
function(event){
                event.preventDefault();

                var character = '',
                    type = $(this).data('type'),
                    targetValue = $(settings.target).val();

                switch(type) {
                    case 'capslock' :
                        toggleCase(obj);
                        break;

                    case 'shift' :
                        toggleCase(obj);
                        toggleAlt(obj);
                        break;

                    case 'return' :
                        character = '\n';
                        break;

                    case 'reset' :
                        targetValue = targetValue.substr(0, 
targetValue.length - targetValue.length);
                        break;

                    case 'tab' :
                        character = '\t';
                        break;

                    case 'space' :
                        character = ' ';
                        break;

                    case 'delete' :
                        targetValue = targetValue.substr(0, 
targetValue.length - 1);
                        break;

                    case 'symbol' :
                        if(obj.hasClass('softkeys--alt')) {
                            character = 
$(this).children('span').eq(1).html();
                        } else {
                            character = 
$(this).children('span').eq(0).html();
                        }
                        break;

                    case 'letter' :
                        character = $(this).html();

                        if(obj.hasClass('softkeys--caps')) {
                            character = character.toUpperCase();
                        }

                        break;
                }

                $(settings.target).focus().val(targetValue + character);


            });
        },

        toggleCase = function(obj) {
            obj.toggleClass('softkeys--caps');
        },

        toggleAlt = function(obj) {
            obj.toggleClass('softkeys--alt');
        };

    return this.each(function(){
        for (var i = 0; i < settings.layout.length; i++) {
            createRow($(this), settings.layout[i]);
        }



        bindKeyPress($(this));
    });
};

}(jQuery));
EN

回答 1

Stack Overflow用户

发布于 2017-12-14 15:46:00

最大长度

如果类型属性的值是textemailsearchpasswordtelurl,则此属性指定用户可以输入的最大字符数(使用UTF16代码单元)。对于其他控件类型,它将被忽略。它可以超过size属性的值。如果未指定,则用户可以输入无限制的字符数。指定负数将导致默认行为(即用户可以输入无限数量的字符)。仅当属性的值已更改时,才会计算约束。

我对此属性的理解是,浏览器将检查keydownkeypress事件的值是否匹配或超过maxlength,并返回false

由于这些事件不是由虚拟键盘触发的,因此我建议在输入值时进行模拟。

例如,如下所示:

代码语言:javascript
复制
var newValue = targetValue + character;
if(newValue.length < $(settings.target).attr("maxlength")){
  $(settings.target).focus().val(newValue);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47807613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档