07. maj 2008 - 13:05
Der er
17 kommentarer og 1 løsning
problem med wysiwyg i ei
Hej eksperter, jeg har en lille wysiwyg, som virker fint i firefox, safari og opera men ikke i ie6/ie7 ? sådan her ser min html side ud: <html> <head> <script type="text/javascript" src="js/wi_editor.js"></script> <script type="text/javascript"> //wi_editor.CreateEditor('1'); window.onload = function() {wi_editor.CreateEditor('content');}; </script> </head> <body> <form name="1"> <textarea name="content" id="content">Dette er en html editor</textarea> </form> </body> </html> og min javascript fil ser sådan her ud: var TheEditor; var rememberContent = ""; var SetEditor=""; wi_editor = { CreateEditor: function(id) { var doc=document.getElementById(id); doc.style.display ="none"; var i_id = "editor_" + id; if(doc == null) { alert("Det er ingen TEXTAREA med id'et :" + id ); return; } if(doc.innerHTML != null && doc.innerHTML != "") rememberContent = doc.innerHTML; var newElm = document.createElement("div"); newElm.setAttribute( "id", "editor" ); newElm.innerHTML = "<div id='editor_bar'>"; newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"bold\")'>bold</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"italic\")'>italic</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"underline\")'>underline</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"strikethrough\")'>strikethrough</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"subscript\")'>subscript</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"superscript\")'>superscript</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"justifycenter\")'>justifycenter</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"justifyleft\")'>justifyleft</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"justifyright\")'>justifyright</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"justifyfull\")'>justifyfull</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"selectall\")'>selectall</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"removeformat\")'>removeformat</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"copy\")'>copy</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"cut\")'>cut</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"paste\")'>paste</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"redo\")'>redo</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='java script:wi_editor.SelectEdit(\"undo\")'>undo</div>"; newElm.innerHTML += "</div><div id='editor_input'>"; newElm.innerHTML += "<iframe id='"+i_id+"' frameborder='0' style='width:100%;height:300px;'></iframe>"; newElm.innerHTML += "</div>"; doc.parentNode.insertBefore(newElm,doc); TheEditor = document.getElementById(i_id).contentWindow.document; TheEditor.open(); TheEditor.write(rememberContent); TheEditor.close(); TheEditor.designMode = "on"; }, SelectEdit : function(id){ switch(id) { case "bold": TheEditor.execCommand('bold', false, null); break; case "italic": TheEditor.execCommand('italic', false, null); break; case "underline": TheEditor.execCommand('underline', false, null); break; case "strikethrough": TheEditor.execCommand('strikethrough', false, null); break; case "subscript": TheEditor.execCommand('subscript', false, null); break; case "superscript": TheEditor.execCommand('superscript', false, null); break; case "justifycenter": TheEditor.execCommand('justifycenter', false, null); break; case "justifyleft": TheEditor.execCommand('justifyleft', false, null); break; case "justifyright": TheEditor.execCommand('justifyright', false, null); break; case "justifyfull": TheEditor.execCommand('justifyfull', false, null); break; case "selectall": TheEditor.execCommand('selectall', false, null); break; case "removeformat": TheEditor.execCommand('removeformat', false, null); break; case "copy": TheEditor.execCommand('copy', false, null); break; case "cut": TheEditor.execCommand('cut', false, null); break; case "paste": TheEditor.execCommand('paste', false, null); break; case "undo": TheEditor.execCommand('undo', false, null); break; case "redo": TheEditor.execCommand('redo', false, null); break; } } }
Annonceindlæg fra Academic Work Denmark A/S
Er den nogle der kan se hvor problemmet er i forhold til at den ikke virker i ie!
der sker ingen ting hvis man man maker noget text og klikker på en af funktionerne , samt at den text der bliver overført fra det oprindelige textarea til iframen bliver placeret underligt?
Kan vi se koden i aktion via et link?
i kan se den her wedia.dk/wi_editor/wi_editor.html
Jeg tror bare, du skal sætte fokus i tekstfeltet som det allerførste i funktionen SelectEdit().
det virker ikke. men en anden ting af en eller anden grund virker "selectall" som den eneste funktion, men den funktion er jo = men de andre ?
Ja. Men det er jo, fordi f.eks. funktionen "bold" kræver at noget er markeret, for at det kan blive udført. SelectAll kræver ikke, at noget er markeret - for funktionen skal jo selv markere. I nedenstående skal du indsætte en fokus-funktion i stedet for *FOKUS*: SelectEdit : function(id){ *FOKUS* switch(id) { case "bold": TheEditor.execCommand('bold', false, null); break; case "italic": TheEditor.execCommand('italic', false, null); break; case "underline": TheEditor.execCommand('underline', false, null); break; case "strikethrough": TheEditor.execCommand('strikethrough', false, null); break; case "subscript": TheEditor.execCommand('subscript', false, null); break; case "superscript": TheEditor.execCommand('superscript', false, null); break; case "justifycenter": TheEditor.execCommand('justifycenter', false, null); break; case "justifyleft": TheEditor.execCommand('justifyleft', false, null); break; case "justifyright": TheEditor.execCommand('justifyright', false, null); break; case "justifyfull": TheEditor.execCommand('justifyfull', false, null); break; case "selectall": TheEditor.execCommand('selectall', false, null); break; case "removeformat": TheEditor.execCommand('removeformat', false, null); break; case "copy": TheEditor.execCommand('copy', false, null); break; case "cut": TheEditor.execCommand('cut', false, null); break; case "paste": TheEditor.execCommand('paste', false, null); break; case "undo": TheEditor.execCommand('undo', false, null); break; case "redo": TheEditor.execCommand('redo', false, null); break; } }
I øvrigt er "java script:" helt overflødigt i onclick og andre eventhandlers, da der i disse som standard skrives javascript. :)
-- og hele den blok kan vel skrives: SelectEdit : function(id){ TheEditor.execCommand(id, false, null); }
selv om at jeg sætter denne linje ind så virker den ikke i IE6 eller I document.getElementById('editor_content').contentWindow.focus(); roenving--> jo det kan den :0) jeg har bare valgt at lave switch'en for bedre at holde styr på hvilke funktioner jeg har fået sat ind, men da skal tilslut gøres mere simple.
I min wysiwyg har jeg en lignende funktion, der således ud: function ExecCommand(a,b,c){ document.getElementById("wysiwyg").contentWindow.focus(); document.getElementById("wysiwyg").contentWindow.document.execCommand(a,b,c); }
nu er mit javascript : var TheEditor; var rememberContent = ""; var doc; var i_id; wi_editor = { CreateEditor: function(id) { doc=document.getElementById(id); doc.style.display ="none"; i_id = "editor_" + id; if(doc == null) { alert("Det er ingen TEXTAREA med id'et :" + id ); return; } if(doc.innerHTML != null && doc.innerHTML != "") rememberContent = doc.innerHTML; var newElm = document.createElement("div"); newElm.setAttribute( "id", "editor" ); newElm.innerHTML = "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"bold\")'>bold</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"italic\")'>italic</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"underline\")'>underline</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"strikethrough\")'>strikethrough</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"subscript\")'>subscript</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"superscript\")'>superscript</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"justifycenter\")'>justifycenter</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"justifyleft\")'>justifyleft</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"justifyright\")'>justifyright</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"justifyfull\")'>justifyfull</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"selectall\")'>selectall</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"removeformat\")'>removeformat</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"copy\")'>copy</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"cut\")'>cut</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"paste\")'>paste</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"redo\")'>redo</div>"; newElm.innerHTML += "<div class='imagebtn' onclick='wi_editor.SelectEdit(\"undo\")'>undo</div>"; newElm.innerHTML += "<div class='clear'></div>"; newElm.innerHTML += "<iframe id='"+i_id+"' frameborder='0' style='width:100%;height:300px;'></iframe>"; doc.parentNode.insertBefore(newElm,doc); TheEditor = document.getElementById(i_id).contentWindow.document; TheEditor.open(); TheEditor.write(rememberContent); TheEditor.close(); if (TheEditor.body.contentEditable) { TheEditor.body.contentEditable = true; } else { TheEditor.designMode = "on"; } //alert(newElm.innerHTML); }, SelectEdit : function(id){ try { document.getElementById(i_id).contentWindow.document.execCommand("bold", false, null); } catch (e) { alert("This demo is not supported on your level of Mozilla."); } document.getElementById(i_id).contentWindow.focus(); TheEditor.execCommand(id, false, null); } } men det virker stadig ikke i IE
document.getElementById(i_id).contentWindow.focus(); skal lige op foran try tror jeg.
jeg har fjernet try delen og det virker stadig ikke! heller ikke vis jeg sætter "editor_content" ind istedet for "i_id"
Prøv lige at alerte: alert(document.getElementById(i_id).contentWindow);
Vi tilbyder markedets bedste kurser inden for webudvikling