代码之家  ›  专栏  ›  技术社区  ›  Nathan H

HTML5在Firefox中输入类型“数字”

  •  15
  • Nathan H  · 技术社区  · 15 年前

    我正在开发一个只供少数人内部使用的应用程序,所以我很乐意告诉他们只使用火狐或Chrome,这样我就可以使用HTML5了。

    我正在研究一个非常简单的功能:

    <style> 
    input:invalid { background-color: red; }
    div.box {
    border-color:#000; 
    border-width:thin; 
    border-style:solid;
    }
    </style>     
    <input type="number" name="id"> <small>(if the box becomes red, make sure you didn't put a space)</small> 
    

    它在Chrome中工作得很好:它变成红色,不让你提交,没有我编码任何其他东西。

    火狐…没那么多。它就像我有一个“文本”类型。

    这是一个已知的问题吗?解决问题?

    谢谢

    6 回复  |  直到 8 年前
        1
  •  7
  •   andyuk    15 年前

    首先,你在使用火狐4吗?HTML5表单在版本4中有更好的支持。

    此页面包含有关HTML5表单和当前Bug的详细信息 https://wiki.mozilla.org/User:Mounir.lamouri/HTML5_Forms

    更新:如果浏览器不支持要使用的HTML5功能,请尝试 Modernizr . 它使用JavaScript来增强支持。它的文件有 information about input types .

        2
  •  6
  •   Matt user129975    13 年前

    这是一个已知的问题吗?

    对。未知类型被视为文本。(许多浏览器往往不知道仅出现在规范草案中的类型)

    解决问题?

    JavaScript

        3
  •  5
  •   Jon Schneider Stefan    11 年前

    input type="number" 到第25版(2013年11月)还没有在Firefox中实现。

    bug 344616是bugzilla@mozilla中的相关票据: https://bugzilla.mozilla.org/show_bug.cgi?id=344616

    更新时间:2014年3月10日 -好消息!好像是在火狐29里订的票, scheduled 2014年4月29日发布。

    更新日期:2014年4月30日 -确认,我刚尝试过,火狐29支持 input type=“数字” .

        4
  •  4
  •   itpastorn    15 年前

    浏览器已经得到这个了。里程数可能会有所不同,但在所有浏览器中肯定都有工作要做。

    Opera将向您显示一个用户界面,允许您上下单击箭头来增加或减少数字。 但是,即使输入了数字以外的任何内容,也可以提交表单。可访问性还不完善,但至少您还可以使用键盘上的箭头来增加和减少数字。

    Chrome还没有该号码的用户界面,因此没有帮助或 没有视觉暗示 需要一个数字。Chrome也没有真正的错误消息。将输入边框稍微转为红色显然不够好,这是 完全无法访问 . 当涉及到可访问性时,Chrome基本上是所有浏览器中最严重的问题,例如对aria的零支持。

    您正在使用 :伪类无效 使整个输入小部件变红。请注意,这可能比Chrome中的默认样式更清晰,但它仍然不是一个可访问的解决方案。由于chrome不支持aria,坏消息是即使您通过javascript提供文本错误消息,盲人用户或任何其他使用屏幕阅读器的人也可能根本听不到。

    火狐可能会迟到,但请认识到Mozilla very strict shipping criteria for its features 而Chrome却不考虑后果。

        5
  •  1
  •   Abdelhalim FELLAGUE CHEBRA    8 年前

    我正在使用火狐,我有同样的问题开发我的输入类型数字键入字符和空格等… 无论如何,我在这个例子中使用的是Angular2,它几乎与JavaScript相似,所以您可以在任何情况下使用这个代码: 这是HTML:

    <input class="form-control form-control-sm" id="qte" type="number"  min="1" max="30" step="1" [(ngModel)]="numberVoucher"
         (keypress)="FilterInput($event)" />
    

    下面是函数filterinput:

    FilterInput(event: any) {
            let numberEntered = false;
            if ((event.which >= 48 && event.which <= 57) || (event.which >= 37 && event.which <= 40)) { //input number entered or one of the 4 directtion up, down, left and right
                //console.log('input number entered :' + event.which + ' ' + event.keyCode + ' ' + event.charCode);
                numberEntered = true;
            }
            else {
                //input command entered of delete, backspace or one of the 4 directtion up, down, left and right
                if ((event.keyCode >= 37 && event.keyCode <= 40) || event.keyCode == 46 || event.which == 8) {
                    //console.log('input command entered :' + event.which + ' ' + event.keyCode + ' ' + event.charCode);
                }
                else {
                    //console.log('input not number entered :' + event.which + ' ' + event.keyCode + ' ' + event.charCode);
                    event.preventDefault();
                }
            }
            // input is not impty
            if (this.validForm) {
                // a number was typed
                if (numberEntered) {
                    let newNumber = parseInt(this.numberVoucher + '' + String.fromCharCode(event.which));
                    console.log('new number : ' + newNumber);
                    // checking the condition of max value
                    if ((newNumber <= 30 && newNumber >= 1) || Number.isNaN(newNumber)) {
                        console.log('valid number : ' + newNumber);
                    }
                    else {
                        console.log('max value will not be valid');
                        event.preventDefault();
                    }
                }
                // command of delete or backspace was types
                if (event.keyCode == 46 || event.which == 8) {
                    if (this.numberVoucher >= 1 && this.numberVoucher <= 9) {
                        console.log('min value will not be valid');
                        this.numberVoucher = 1;
                        //event.preventDefault();
                        this.validForm = true;
                    }
                }
            }
            // input is empty
            else {
                console.log('this.validForm = true');
                this.validForm = false;
            }
        };
    

    在这个函数中,我只需让键按下数字、方向、删除回车,所以这个函数只是为正整数而不是双精度。

        6
  •  0
  •   user671843    11 年前

    火狐从4.0开始就支持模式

     <input name="hours" type="number" pattern="[-+]?[0-9]*[.,]?[0-9]+"/>
    

    (求助) http://html5pattern.com/ )

    推荐文章