HTML5 Тип ввода «число» в Firefox - PullRequest
15 голосов
/ 17 июля 2010

Я работаю над приложением, которое используют только несколько человек, поэтому я чувствую себя комфортно, говоря им использовать только Firefox или 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: он становится красным и не позволяет вам отправлять сообщения, а я ничего не кодирую.

Firefox ... не так много. Он действует так, как если бы у меня был «текстовый» тип.

Это известная проблема? Обходной путь?

Спасибо

Ответы [ 6 ]

7 голосов
/ 17 июля 2010

Прежде всего, вы используете Firefox 4?HTML5 формы имеют гораздо лучшую поддержку в версии 4.

На этой странице есть сведения о формах HTML5 и текущие ошибки https://wiki.mozilla.org/User:Mounir.lamouri/HTML5_Forms

Обновление: если браузер не поддерживает функции HTML5, которые вы хотитеиспользовать, попробуйте Modernizr .Он использует Javascript для улучшения поддержки.В его документации информация о типах ввода .

6 голосов
/ 17 июля 2010

Это известная проблема?

Да. Неизвестные типы обрабатываются как текст. (И типы, которые появляются только в черновых спецификациях, как правило, неизвестны многим браузерам)

Обход

JavaScript

5 голосов
/ 21 ноября 2013

input type="number" еще не реализовано в Firefox начиная с версии 25 (ноябрь 2013 г.).

Ошибка 344616 - соответствующий билет в Bugzilla @ Mozilla: https://bugzilla.mozilla.org/show_bug.cgi?id=344616

Обновление 10 марта 2014 года - Хорошие новости! Похоже, билет был исправлен в Firefox 29, запланирован , релиз 29 апреля 2014 года.

Обновление от 30 апреля 2014 г. - Подтверждено, я только что попробовал, и Firefox 29 поддерживает input type="number".

4 голосов
/ 17 июля 2010

Нет браузер получает это еще.Пробег может отличаться, но во всех браузерах определенно есть над чем поработать.

Opera покажет вам пользовательский интерфейс, позволяющий нажимать стрелки вверх и вниз, чтобы увеличить или уменьшить число.Однако вы можете отправить форму, даже если было введено что-либо, кроме номера.Доступность еще не идеальна, но, по крайней мере, вы также можете использовать стрелки на клавиатуре для увеличения и уменьшения числа.

В Chrome пока нет пользовательского интерфейса для номера, поэтому нет помощи или нетвизуальный намек , что ожидается число.Chrome также не имеет реального сообщения об ошибке.Слегка покрасить входную границу в слегка красный цвет по умолчанию недостаточно, и он полностью недоступен .Chrome в основном является худшим нарушителем всех браузеров, когда речь заходит о доступности, например, нулевой поддержке ARIA.

Вы используете псевдокласс : invalid , чтобы сделать весь входной виджет красным.Обратите внимание, что это может быть более понятным, чем стиль по умолчанию в Chrome, но все еще не доступно.Поскольку Chrome не поддерживает ARIA, плохая новость заключается в том, что даже если вы предоставите текстовое сообщение об ошибке через JavaScript, слепой пользователь или любой другой пользователь, использующий программу чтения с экрана, может вообще не услышать его.

Firefox может опоздать к этой игре, но, пожалуйста, примите во внимание тот факт, что Mozilla имеет очень строгие критерии доставки для своих функций , в то время как Chrome не задумывается о последствиях.

1 голос
/ 17 апреля 2017

Я использую Firefox, у меня возникла та же проблема при разработке моего типа ввода чисел, набирая символы и пробелы и т.д. ... в любом случае я использую angular 2 в этих примерах, это почти похоже на 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;
        }
    };

в этой функции мне нужно было просто позволить вводу чисел, направлению, удаляет ввод, так что этоФункция только для положительного целого числа, не удваивается.

0 голосов
/ 03 апреля 2014

Firefox поддерживает шаблоны с 4.0

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

(Справку см. http://html5pattern.com/)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...