Autor | Zpráva | ||
---|---|---|---|
Igor Profil |
#1 · Zasláno: 16. 9. 2011, 21:11:27 · Upravil/a: Igor
Zdravím,
pomocí javascriptu počítám a nastavuji počet řádků pro textarea a zjistil jsem, že FF to nějak špatně počítá. Proto používám odlišný vzorec pro výpočet var rows = ((Math.ceil(len/cols)==0)?1:Math.ceil(len/cols)); |
||
Witiko Profil |
#2 · Zasláno: 17. 9. 2011, 00:20:39
Igor:
Nechceš nám sem dát původní kód, který na nových verzích Firefoxu, jak říkáš, nedělá, co má, a popsat nám co dělat má místo toho, abys to řešil tím nejméně žádoucím a doporučovaným způsobem, jímž je detekce User Agenta? |
||
Igor Profil |
#3 · Zasláno: 17. 9. 2011, 02:04:37 · Upravil/a: Igor
Funkce potřebné
var detectBrowser = function (type) { if (type=="FF"){ if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ //test for Firefox/x.x or Firefox x.x (ignoring remaining digits); var ffversion=new Number(RegExp.$1) // capture x.x portion and store as a number return ffversion; } else return false; } } var substr_count = function (string,substring) { var c = 0; for (var i=0;i<string.length;i++) { if(substring == string.substr(i,substring.length)) c++; } return c; } Druhá část kódu if ($("textarea#"+id).get(0)) { var element = $("textarea#"+id); element.val( result.result[id] ); element.text( result.result[id] ); /** VÝPOČET POČTU ŘÁDKŮ PRO TEXTAREA **/ var val = element.val(); var cols = element.attr("cols"); var len = val.length; var breaks = substr_count(val,"\n"); $len = len + (breaks*cols); // zalomení bere jako kdyby měly rozsah až ke kraji // FF 3.0 - 3.6.2 (zhruba) stále neopravené chyby, včetně počtu řádků v textarea var rows = (detectBrowser("FF")) ? ((Math.ceil(len/cols)==0)?1:Math.ceil(len/cols)) : ((Math.floor(len/cols)==0)?1:Math.floor(len/cols)); element.attr("rows", rows); } } Řádek 15 až opravuje chybu. Ovšem vzhledem k tomu, že při testu v opeře a IE dostávám chybovou hlášku: Event thread: click Error: name: ReferenceError message: Statement on line 1: Undefined variable: JSON Backtrace: Line 1 of function script $.post("ax.php?action=get&prev=1", { rid: $("textarea#id").val(), selects: JSON.stringify(getSelected()) } , function(result) { loadFormData(result); }, "json");;return false; ... stacktrace: n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace' Tak to nemohu otestovat v IE a OP. Přitom v FF to jede (odesílání objektu AJAXem) a žádný jiný problém jsem v JS nezaznamenal. Myslel jsem že JSON je součástí JQUERY. Co se týče té chyby zmíněné v prvním příspěvku, tak jde o to, že IE a OP mají o jeden řádek více. Proto pro FF provádím ceil, místo floor a tím je chyba opravena. |
||
Witiko Profil |
#4 · Zasláno: 17. 9. 2011, 13:48:52 · Upravil/a: Witiko
Igor:
„Myslel jsem že JSON je součástí JQUERY“ Ne, JSON objekt je součástí specifikace ECMA 5 (nadjazyk JavaScriptu), zatímco většina starších prohlížečů podporuje pouze specifikaci ECMA 3.1. Pro parsování napříč prohlížeči použij funkci jQuery.parseJSON. Ta v případě podpory JSON objektu použije ten, jinak prožene daný json vlastním algoritmem.
Ohledně počítání řádků v textarea - co to dělat nějak takto: <textarea onkeyup="this.style.height = this.scrollHeight + 'px';" rows="1" style="overflow: hidden;"></textarea> |
||
Časová prodleva: 13 let
|
0