2011-03-19 10 views
9

En los navegadores Webkit, una entrada [type = número] tiene un control de cuadro de número:html5 número de tipo de entrada: detectar si caja de hilatura o no (y no otras características)

spinbox control in webkit browsers

Sin embargo, Safari no sigue algunas otras reglas de entrada [type = number], como forzar que solo se ingresen caracteres numéricos. Por lo tanto, Modernizr detecta que Safari no admite la entrada [type = number].

Tengo necesidades muy particulares para el ancho de entrada de número, y cuando hay un cuadro de giro, hago el ancho 2.7em y sin él (como en Firefox), el ancho solo necesita 1.7em. Así que Chrome y Firefox se ven bien. Pero Safari pone en una caja de hilatura, pero no sigue cualesquiera otras normas, por lo que recibe el ancho 1.7em y se ve así:

number input in Safari

Sólo me importa si hay un control de cuadro de número. No me importan las otras reglas de entrada [type = number] que Safari está burlando. Safari está jugando con la única regla que me importa. ¿Cómo lo detecto?

+1

Esto es sólo una suposición, pero ¿podría intentar determinar el ancho de la entrada, cambiarla para escribir "número", volver a medir el ancho y ver si ha cambiado? Dudo que eso vaya a funcionar, pero es una idea. – Tower

Respuesta

7

que sugieren hiding el cuadro de número cuando Modernizr no detecta el apoyo para las entradas numéricas:

JS:

if (!Modernizr.inputtypes.number) { 
    $('body').addClass('no-number-input'); 
} 

CSS:

.no-number-input input::-webkit-outer-spin-button, 
.no-number-input input::-webkit-inner-spin-button { 
    -webkit-appearance: none; 
    margin: 0; 
} 

Si usted realmente quiere detectar si el cuadro de giro es visible, puede hacer algo como:

window.getComputedStyle(input, '-webkit-inner-spin-button').getPropertyValue('-webkit-appearance') != 'none' 

donde input es un elemento "crudo", aunque puede que no sea muy confiable, p. en Safari para Windows.

-1
if (Modernizr.inputtypes.number) { 
    $('input[type=number]').width('2.7em'); 
} else { 
    $('input[type=number]').width('1.7em'); 
} 
+2

Eso es esencialmente lo que estoy haciendo ahora. Modernizr es lo suficientemente inteligente como para ver que Safari no ** en realidad ** admite la entrada de número, ya que Safari no exige que solo se ingresen los números. Esta es la raíz del problema. Safari ** no pone el control de cuadro de giro, y eso es todo lo que quiero comprobar. – chadoh

Cuestiones relacionadas