|
[Grafika]
[WebTip]
[Fotografování]
[Galerie]
[MujMac]
[Printing]
|
|||||||||
![]() |
||||||||||
|
|
|||||||||
Diskuzní forum: JavaScriptTéma diskuze: konference o Javascriptu a příbuzných tématechTip: nemáte rádi v textu smajlíky? Ruší vaše zdrojové kody? Vypněte si je! (Moje nastavení / Nastavení soukromí) Moje kopírovací funkce nefunguje v IE
Vloženo uživatelem: gisat - uživatel již zaslal 183 příspěvků (IP uloženo)
Datum: 30. 01. 2010 03:12
Ahoj mám takový dotaz,
vytvořil jsem pomocí jQuery pluginu Caret a jQuery funkci, která po označení textu v textarea nebo input textu zkopíruje v vloží zkopírovaný text. Vše probíhá ve Firefoxu, Opeře i Chrome v pořádku, pouze v Internet exploreru funkce nefunguje, mohli byste mi prosím poradit proč tomu tak je? Děkuju předem za odpověď. Můj kód funkce: ----------------- function kopiruj_vloz_text(objekt,kopi,paste){ textik="";//promenna do ktere se ulozi zkopirovany text vloz=""; // zac=""; kon=""; poz=""; delka=""; jQuery("#"+objekt).mouseup(function(){ //PRIPRAVA KE KOPIROVANI //zajistime body pro urceni polohy kurzoru zacatek=jQuery("#"+objekt).caret().start; konec=jQuery("#"+objekt).caret().end; //jestlize je v textarea umistnen nejaky text a zaroven jsme text na kopirovani mysi vybrali(zamodrili) if(jQuery("#"+objekt).val()!="" &&(zacatek!=konec)){ //ulozime zamodrelou cast do promenne textik=jQuery("#"+objekt).caret().text;} //----------------------- if(vloz=="1" &&(zacatek==konec)){ delka=jQuery("#"+objekt).val().length; zac=jQuery("#"+objekt).val().substring(0,zacatek); kon=jQuery("#"+objekt).val().substring(zacatek,delka); poz=zacatek;}}); //--------------- jQuery("#"+kopi).click(function(){ if(textik!=""){vloz="1";}}); //--------------- jQuery("#"+paste).click(function(){ if(zac!="" && kon!=""){jQuery("#"+objekt).val(zac+textik+kon);} if(poz==delka){jQuery("#"+objekt).val(zac+kon+textik);} if(poz==0){jQuery("#"+objekt).val(textik+zac+kon);}}); } Kód formuláře je takovýto: ----------------------------- <input type="button" id="kopy" value="KOPIROVAT"/><input type="button" id="paste" value="VLOZIT"/><br/> <textarea id="kop" name="kopik"></textarea> Re: Moje kopírovací funkce nefunguje v IE
Vloženo uživatelem: Neregistrovaný uživatel: qwertz (IP uloženo)
Datum: 30. 01. 2010 06:17
No já se spíš divím, že to vůbec funguje . Teď nemám čas se v tom vrtat, takže tě nasměruju na pár základních pojmů, které by sis měl doplnit:
- typy proměnných (!) - globální/lokální proměnné - kontext funkce - kdy použít/nepoužít závorky(jak normální, tak složené) Až budu mít dneska čas, tak se na to podívám blíž. Re: Moje kopírovací funkce nefunguje v IE
Vloženo uživatelem: Neregistrovaný uživatel: qwertz (IP uloženo)
Datum: 30. 01. 2010 07:39
Tak takhle nejak by to mělo vypadat:
<html> <head> <script src="jquery.js"></script> <script src="jquery.caret.js"></script> <script> $.fn.kopirovat_vlozit = function(kopirovat, vlozit) { var ulozit = function() { $(this).data("kurzor", $(this).caret()); return true; }; var $pole = $(this); $pole .mouseup(ulozit) .keyup(ulozit); $(kopirovat).click(function() { var kurzor = $pole.data("kurzor"); if (kurzor.text) $pole.data("schranka", kurzor.text); alert(kurzor.text); $pole.caret(kurzor); }); $(vlozit).click(function() { var schranka = $pole.data("schranka"); if (schranka) { var kurzor = $pole.data("kurzor"); var text = $pole.val(); var zacatek = text.substring(0, kurzor.start); var konec = text.substring(kurzor.end, text.length); $pole.val(zacatek + schranka + konec); $pole.caret(kurzor); } }); }; $(function() { $("#pole").kopirovat_vlozit("#kopirovat", "#vlozit"); }); </script> </head> <body> <input type="button" id="kopirovat" value="KOPIROVAT"> <input type="button" id="vlozit" value="VLOZIT"><br> <textarea id="pole"></textarea> </body> </html> Ovšem ani tohle nefunguje v IE, takže chyba není v kódu, ale v caret pluginu. Projel jsem ho validátorem a vyhodilo to kolem dvaceti chyb. Jestli budu mít chuť a čas, tak ještě opravím i ten plugin. Re: Moje kopírovací funkce nefunguje v IE
Vloženo uživatelem: gisat - uživatel již zaslal 183 příspěvků (IP uloženo)
Datum: 30. 01. 2010 15:05
qwertz Napsal:
------------------------------------------------------- > Ovšem ani tohle nefunguje v IE, takže chyba není v > kódu, ale v caret pluginu. Projel jsem ho > validátorem a vyhodilo to kolem dvaceti chyb. > Jestli budu mít chuť a čas, tak ještě opravím i > ten plugin. dobře neuvedl jsem že některé proměnné jsou globálními, to ale není taková chyba, pokud si stojí mimo ostatní funkce jsou přeci globálními. Nepoužil jsem anonymní funkce, které tam uvádíš ty, to ale také není problém, anonymní funkce nejsou nutností. Prošel jsem ten svůj kód ve Firebugu, a také nic nenalezl, v čem jsi provedl debugging? Tady mi to spíš připomíná o různých stylech programování, takže ten můj styl také není chybou. Řešit se dá ten problém samozřejmě různě. Mně šlo spíš o to, proč to IEčko ten můj kód nebere, když Firefox, Chrome, Safari a Opera s ním nemají problémy. Mohl bys mi prosím napsat kde ty dané chyby mám? Re: Moje kopírovací funkce nefunguje v IE
Vloženo uživatelem: Neregistrovaný uživatel: qwertz (IP uloženo)
Datum: 31. 01. 2010 00:40
Já jsem přece psal, že chyby tam má autor pluginu. Ten tvůj postup je sice sám o sobě funkční, ale dovedu si představit situace, kdy to fungovat nebude nebo to pojede pomalu. Tím jsem se tě nechtěl nějak dotknout, jen jsem tě upozornil, kde to má zatím slabiny. Zítra budu mít času dost, tak se podívám ještě na ten plugin. Re: Moje kopírovací funkce nefunguje v IE
Vloženo uživatelem: gisat - uživatel již zaslal 183 příspěvků (IP uloženo)
Datum: 31. 01. 2010 01:43
Nejsem uražený, nebo dotčený, učím se jQuery a o takovéto konstrukci jsem nevěděl. Spíš bych se ti měl omluvit, děkuji za pomoc , pokud poradíš i jak s tím caretem budu rád. Ještě jednou děkuju ![]() Re: Moje kopírovací funkce nefunguje v IE
Vloženo uživatelem: Neregistrovaný uživatel: qwertz (IP uloženo)
Datum: 31. 01. 2010 13:35
Ok. Tady máš ten opravený plugin:
(function($) { $.fn.caret = function(options, opt2) { var start, end, t = this[0]; if (typeof options === "object" && typeof options.start === "number" && typeof options.end === "number") { start = options.start; end = options.end; } else if (typeof options === "number" && typeof opt2 === "number") { start = options; end = opt2; } else if (typeof options === "string") { if((start = t.value.indexOf(options)) > -1) end = start + options.length; else start = null; } else if (Object.prototype.toString.call(options) === "[object RegExp]") { var re = options.exec(t.value); if (re !== null) { start = re.index; end = start + re[0].length; } } if (typeof start != "undefined") { if ($.browser.msie) { var selRange = this[0].createTextRange(); selRange.collapse(true); selRange.moveStart('character', start); selRange.moveEnd('character', end - start); selRange.select(); } else { this[0].selectionStart = start; this[0].selectionEnd = end; } this[0].focus(); return this; } else { var e, s; if ($.browser.msie) { var val = this.val(); var range = document.selection.createRange().duplicate(); range.moveEnd("character", val.length); s = (range.text == "" ? val.length : val.lastIndexOf($.trim(range.text))); var range = document.selection.createRange().duplicate(); range.moveStart("character", -val.length); e = $.trim(range.text).length; } else { s = t.selectionStart; e = t.selectionEnd; } var te = t.value.substring(s, e); return { start: s, end: e, text: te, replace: function(st) { return t.value.substring(0, s) + st + t.value.substring(e, t.value.length); } }; } return this; }; })(jQuery); Toto fórum je provozováno také jako emailová konference s e-mailovou adresou js [a] builder.cz. Toto je neredigovaná a nemoderovaná diskuse čtenářů serveru Builder.cz. Redakce ani provozovatel serveru za obsah jednotlivých příspěvků nenese zodpovědnost. |