2013-06-13 3 views
2

Я хочу написать прокладку для старых браузеров, которые не поддерживают <input type="number">.Найти все <input type = "number"> на странице в браузере, который их не поддерживает

Это легко обнаружить, как в тех браузерах, любой input где вы установите type в number сообщит о type в text. Так хорошо до сих пор.

Так что я хочу найти каждый <input type="number"> и подключить события для этих старых браузеров.

Проблема в следующем: как их найти?

  • $('input[type=number]').length === 0 (конечно).
  • $('input[name=aKnownNumberField]')[0].type === 'text' еще раз, не удивительно, поскольку это проверка, используемая для обнаружения функции в первую очередь.
  • $($('input[name=aKnownNumberField]')[0]).parent().html().indexOf('type="number"') (или любая аналогичная проверка HTML) также терпит неудачу, потому что возвращенный HTML будет соответствовать данным DOM браузера.

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

Как определить <input type="number"> в браузерах, которые их не поддерживают?

+1

'document.querySelectorAll ("вход [тип = 'число']")' ' – Cherniv

+0

@Cherniv querySelectorAll' не поддерживается очень браузеры Кит пытается цели. – MrCode

+0

Не могли бы вы добавить дополнительный атрибут для элементов ... например 'data-input-type =" number "'? Затем вы можете получить их с помощью '$ ('input [data-input-type =" number "]')' – Ian

ответ

4

Если вы используете JQuery, вы можете получить их с помощью .filter():

var $unsupported = $('input').filter(function() { 
    return this.type !== $(this).attr('type'); 
}); 

Это будет выбрать все недопустимые входы, так что вы можете отфильтровать, что дальнейшее использование .filter('[type="number"]') или сделать это изнутри функция фильтрации.

Чистый раствор JS не сильно отличается:

var inputs = document.getElementsByTagName('input'); 

for (var i = 0; i < inputs.length; i++) { 
    if (inputs[i].type === inputs[i].getAttribute('type')) { 
     continue; 
    } 

    // inputs[i] isn't supported by the browser 
} 

И демо: http://fiddle.jshell.net/PENRD

Я тестировал его в IETester и работал вплоть до IE6.

+0

Хм, похоже, что он работает в старом IE, но не в IE9 или 10 в унаследованном режиме - в IE10, поскольку IE7 он терпит неудачу, в IE7 он работает. Lovely: -S – Keith

+0

@Keith Я нашел много вещей, которые не работают с IE10 и режим совместимости ... это боль – Ian

 Смежные вопросы

  • Нет связанных вопросов^_^