2010-05-27 74 views
8

tengo una simple función de jQuery:jQuery val no funciona correctamente en Chrome

$('#selectable1 span').live('mousedown', function() { 
     var ff = $(this).css("font-family"); 
     $("#family").val(ff); 
}); 

Cuando se hace clic en un elemento span (mousedown) una entrada (#family) toma su valor familia de fuentes. Funciona en Firefox pero en Chrome funciona solo para familias de fuentes compuestas de una sola palabra. Georgia funcionará, pero Times New Roman no lo hará.

Puede ver el código aquí:

http://jsfiddle.net/aLaGa/

o viven en http://www.typefolly.com

Lo que está mal con esto? Thanx

+0

+1 Estas son algunas cosas interesantes que estás haciendo con HTML5 y CSS3. – Anurag

+0

Thanx Anurag. Me alegra que lo haya notado – Mircea

Respuesta

2

Puede cambiar la secuencia de comandos ligeramente para reemplazar las citas que WebKit añade cuando el nombre de la fuente contiene espacios, así:

$('#selectable1 span').live('mousedown', function() { 
    var ff = $(this).css("font-family").replace(/\'/g,""); 
    $("#family").val(ff); 
}); ​ 

You can see a working demo here :)

And here's a RegEx approach pulling the literal value out of style that's probably easier than anything, pero no soy una expresión regular gurú, alguien se siente libre de mejorar esto y actualizar la respuesta (yo chupo en RegEx, lo siento!) Esto funciona para todos los ejemplos que tiene.

+0

@Nick: aunque esto funcionará para 'Times New Roman', la solución deberá ir tan lejos como también cambia los valores del cuadro de selección y realmente arregla la forma en que se especifican los valores CSS para la compatibilidad total del navegador. Puedes ver esto incluso en tu demo de trabajo :-) –

+0

Gracias Nick, cuando haces clic en Adage, la dosis no funciona ... – Mircea

+0

@Andy - ¿Clarificar un poco? puedes aplicar la versión sin comillas, funcionará, déjame agregar a la demostración. –

-1

Font-family proporciona una lista de valores separados por comas, no la fuente en uso. También puede dar el valor entre comillas. En su página de muestra, añadiendo la línea alert(ff) da:

'Times New Roman'

Georgia

adage-script-1, adage-script-2

7

Chrome envuelve familias de fuentes que tienen varias palabras con comillas simples. Por lo tanto, el valor de la familia de fuentes devuelta en Chrome es: 'Times New Roman', que no coincide con el valor en la lista de selección Times New Roman.

Teniendo en cuenta todas estas variaciones del navegador, creo que la mejor solución es dividir los nombres de familia por comas, recortar el comillas simples (si las hay) alrededor de cada nombre de fuente y unirlas más tarde. Use este valor sanitizado dentro de la lista de selección.

$('#selectable1 span').live('mousedown', function() { 
    var fontFamily = $(this).css('font-family'); 

    var fonts = fontFamily.split(','); 
    var sanitizedFonts = $.map(fonts, function(name) { 
     // trim single quotes around font name (if any) for Chrome/Safari 
     // trim double quotes around font name (if any) for Firefox 
     return name.trim().replace(/^['"]|['"]$/g, ''); 
    }); 

    $('#family').val(sanitizedFonts.join(', ')); 
}); 

Ver example. La lista de selección tuvo que ser cambiado para seguir este esquema de nomenclatura coherente para los valores:

fontName[, fontName]

Esto en gran medida se basa en el hecho de que una fuente de nombre no contener comas, cotizadas o no.

+0

hmmm, así que tengo que quitar el valor devuelto de comas – Mircea

+0

+1, estaba a punto de publicarlo después de editar las etiquetas y corregir un error tipográfico. También vale la pena señalar que Chrome también inserta un espacio después de la coma en familias de fuentes separadas por comas, por eso hacer clic en "Adagio" tampoco funciona. –

+0

Ese es otro buen punto @Andy, me lo perdí. – Anurag

Cuestiones relacionadas