2010-05-27 18 views
8

Ich habe eine einfache jQuery-Funktion:jQuery val nicht richtig funktioniert in Chrome

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

Wenn ein span-Element geklickt wird (mousedown-) einen Eingang (#family) bekommt seine Schriftfamilie Wert. Es funktioniert in FireFox, aber in Chrome funktioniert es nur für Schriftfamilien, die nur aus einem Wort bestehen. Georgia wird arbeiten, aber Times New Roman wird nicht.

können Sie den Code sehen hier:

http://jsfiddle.net/aLaGa/

oder bei http://www.typefolly.com leben

Was mit diesem falsch? Thanx

+0

+1 Das sind einige interessante Sachen, die Sie mit HTML5 und CSS3 machen. – Anurag

+0

Danke Anurag. Froh, dass du es bemerkt hast – Mircea

Antwort

2

Sie Ihr Skript leicht, die Anführungszeichen ersetzen ändern können, die WebKit hinzufügt, wenn die Schriftname Leerzeichen enthält, wie folgt aus:

$('#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, aber ich bin kein RegEx Guru, jemand fühlt sich frei, dies zu verbessern und die Antwort zu aktualisieren (ich suck bei RegEx, tut mir leid!) Dies funktioniert für alle Beispiele, die Sie haben.

+0

@Nick: Obwohl dies für 'Times New Roman' funktionieren wird, muss der Fix so weit gehen Ändern Sie auch die Werte der Auswahlbox und legen Sie fest, wie die CSS-Werte für die vollständige Browserkompatibilität angegeben werden. Du kannst das sogar in deiner Arbeitsdemo sehen :-) –

+0

Danke Nick, wenn du auf Adage klickst dos nicht funktioniert ... – Mircea

+0

@Andy - Clarify ein bisschen? Sie können die Version ohne Anführungszeichen anwenden, es wird funktionieren, lassen Sie mich zur Demo hinzufügen. –

-1

Die Schriftfamilie gibt eine Liste kommagetrennter Werte an, nicht die verwendete Schrift. Es kann auch den Wert in Anführungszeichen geben. Auf der Musterseite, das Hinzufügen der Zeile alert(ff) gibt:

'Times New Roman'

Georgia

adage-script-1, adage-script-2

7

Chrome hüllt Schriftfamilien mehrere Wörter mit einfachen Anführungszeichen mit. Der in Chrome zurückgegebene Wert für font-family lautet also: 'Times New Roman', der nicht mit dem Wert in der Auswahlliste Times New Roman übereinstimmt.

In Anbetracht all dieser Browservariationen denke ich, dass die beste Lösung darin besteht, die Familiennamen durch Kommas auseinander zu schneiden, das Anführungszeichen (falls vorhanden) um jeden Schriftartnamen zu trimmen und sie später zu verbinden. Verwenden Sie diesen bereinigten Wert in der Auswahlliste.

$('#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(', ')); 
}); 

Siehe eine example. Die Auswahlliste mußte geändert werden, um dieses konsistente Namensschema für Werte zu folgen:

fontName[, fontName]

Dieses schwer beruht auf der Tatsache, dass ein font-Name wird nicht keine Kommas enthält, zitiert oder nicht notiert.

+0

hmmm, also muss ich den zurückgegebenen Wert von comas – Mircea

+0

+1 strippen, war gerade auf dem Weg, dies nach dem Bearbeiten der Tags zu posten und einen Tippfehler zu beheben. Es ist auch erwähnenswert, dass Chrome in kommagetrennten Schriftfamilien auch ein Leerzeichen nach dem Komma einfügt. Deshalb funktioniert auch das Klicken auf "Adage" nicht. –

+0

Das ist ein weiterer guter Punkt @Andy, das habe ich vermisst. – Anurag

Verwandte Themen