тип ввода = 'tel' не работает в IE

мне удалось обойти эту проблему, но, будучи только дилетантом javascript, мне просто интересно узнать, почему это происходит, и если есть способ заставить IE распознавать тип ввода="tel".

Предыстория: мне нужно было добавить единицы ($/минут/лет) рядом с некоторыми текстовыми вводами в опрос, размещенный на сайте опроса. Следующий код отлично работает, пока я не изменю тип на " tel " (чтобы получить соответствующую цифровую клавиатуру для мобильных устройств). После этого он все еще работает в FF, Safari & Chrome, но не в IE. Я прокомментировал, как я исправил это в моем случае.

 SurveyEngine.addOnload(function()
{
/*Place Your Javascript Below This Line*/
  var questionId = this.questionId;
  var inputs = $(questionId).getElementsByTagName('input');
  var telId = "QR~"+questionId;

//get numeric keypad for mobile devices
// this is where I put "if (isIE()==false){" to get around the problem

document.getElementById(telId).type = 'tel'; //IE tells me this argument is invalid

//append "minutes"
for(var x = 0; x<inputs.length;x++){
var input = inputs[x];
if(input.id != undefined && input.type =='tel') //obviously in my fix added "|| type=='text'" to pick up the IEs
{
  var id = input.id;
  $(id).up().innerHTML = $(id).up().innerHTML + "minutes";
}}
});

html-элемент является

<div class='QuestionBody'>
    <div class='ChoiceStructure'>
                <input type='TEXT' autocomplete="off" id='QR~QID18' value='' class='InputText' name='QR~QID18~TEXT' style="width: 80px;" >
    </div>
</div>

любые мысли о том, почему IE задыхается здесь, были бы интересны и, возможно, полезны.

2 ответов


к сожалению, IE не поддерживает TYPE=TEL до в IE10. Вполне допустимо использовать этот тип в разметке:

<input id="test" type="tel" />

однако это будет просто проигнорировано, и IE по умолчанию будет text тип. Установка этого типа в скрипте приведет к ошибке, так как IE не видит это как допустимый тип. Таким образом, вам придется сначала определить, поддерживает ли ваш браузер. Вы можете сделать что-то вроде:

function TelTest()
{
   var test = document.getElementById('test');
   return test.type == 'tel';
}

если TelTest() возвращает true, это означает, что браузер не вернуться к значению по умолчанию text введите и он понимает tel тип.

работающего JSFiddle.


Я бы начал с правильного значения атрибута в разметке (в отличие от изменения его с помощью JS):

<input type="number" id="QR~QID18" ... />

числовой ввод будет откат к текстовому вводу, если он не поддерживается, и если вы после последовательного кросс-браузера, попробуйте использовать polyfill fallback или webshims для браузеров, которые не поддерживают определенные HTML5.

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

боковое Примечание: Вы не должны использовать tel введите не телефонные номера, вместо input[type=number] было бы правильнее.