Till Startsidan

Skaffa webbhotell?
Läs JavaScript.nu's jämförelse av webbhotell.
Med priser från
9 kr / månad.

Genom ett samarbete får alla JavaScript.nu-
besökare dessutom 100 kr i rabatt vid beställning.


Editerbar text

[ JavaScript.nu's Forum ] [ Viktigt om forumet ] [ JavaScript.nu's Startsida ]


Forum / Editerbar text
 Hej!

Med följande javascript kan jag editera text och spara den nya texten med class editable, men trots det är den sparade texten inte editerbar. Hur kan det komma sig? Hur ska jag skriva scriptet för att få den editerade sparade texten åter editerbar?

var config = {
rows: '5',
cols: '25',
okButtonText: 'Spara',
cancelButtonText: 'Avbryt'
};
// identifierar editerbara element när sidan startas, aktiverar funktionen inPlaceEditor
window.onload = function () {
var pElements = document.getElementsByTagName('*');
for (var i=0; i < pElements.length; i++) {
if(pElements[i].className == 'editable')
inPlaceEditor(pElements[i]);
};
};

function inPlaceEditor (editableElement) {
// klick på editerbart element startar en funktion
editableElement.onclick = function() {

// om inget "barn" i editerbara elementet (p-taggen) så skapas textrutan och knapparna
if(this.childNodes[1] == undefined)
{
var text = getTextArea(this); // startar funktionen getTextArea
var buttons = getButtons(text.div); // startar funktionen getButtons
this.className = 'not_editable';
}

if(buttons)
{
var container = this;
// avbryt-knappens funktion definieras
buttons.cancel.onclick = function()
{ // vid klick på avbryt-knappen ..
container.firstChild.nodeValue = text.origText; // .. återgår textrutans text till ursprungstexten ..
container.removeChild(container.childNodes[1]); // .. den tillfälliga diven med textrutan tas bort
container.className = 'editable'; // ursprungstexten görs åter editerbar
// kod som medger att man kan klicka på och aktivera textrutans innehåll utan att samtidigt aktivera "containern"
if (!e) {
var e = window.event;
if (e.stopPropagation) e.stopPropagation();
return false;
}
}

// redigeringsknappens funktion definieras
buttons.edit.onclick = function()
{
var content= document.getElementById('content'); // identifierar ursprungsdiven med id=content
var newText = text.textarea.value; // den nyredigerade texten samlas upp i variablen newText
var newP=document.createElement("p"); // skapar ett nytt p-element
newP.appendChild(document.createTextNode(newText)); // skapar en ny textnod med newText i detta p-element
var lager =document.getElementById("lager"); // läggar "lagret" dvs. textrutan med innehåll i variablen lager
content.insertBefore(newP, lager.parentNode); // sätter in den nya texten ovanför diven (id=lager) med textrutan
newP.className = 'editable'; // förser den nya p-taggen med className editable
var cont=lager.parentNode; // skapar identitet till lagrets förälder, dvs. p-taggen som ej har id, endast classnamn
cont.parentNode.removeChild(cont); // tar bort den tillfälliga lagerdiven med textrutan
}
}
}
}

function getTextArea(obj)
{
var origText = obj.firstChild.nodeValue; // lägg den ursprungliga texten i variabeln origText
obj.firstChild.nodeValue = '';

var div = document.createElement("div"); // skapa ett div-element för att lagra den tillfälliga textrutan
div.setAttribute("id","lager"); // ge den skapade diven id=lager
obj.appendChild(div); // lägg denna div som barn till p-taggen

var textarea = document.createElement("textarea"); // skapa en textruta
textarea.setAttribute("cols", config.cols); // hämta textrutans kolumnstorlek från var config
textarea.setAttribute("rows", config.rows); // hämta textrutans radstorlek från var config
textarea.value = origText; // lägg den ursprungliga texten i textrutan
div.appendChild(textarea); // lägg textrutan i den skapade diven
// skapa den redigerbara textrutan, lägg in ursprungstexten och placera allt i den skapade diven
var text = {
'origText': origText,
'textarea': textarea,
'div': div
}
return text;
}

function getButtons(obj)
{
var br = document.createElement("br"); // skapa radbrytning för att knapparna ska komma under textrutan
var edit = document.createElement("input"); // skapa editeringsfunktion
edit.setAttribute("type", "button"); // knyt editeringsfunktionen till en knapp
edit.setAttribute("value", config.okButtonText); // hämta upp data från var config
obj.appendChild(br); // koppla radbrytning till knappen
obj.appendChild(edit); // koppla editeringsfunktionen till knappen

var cancel = document.createElement("input"); // skapa avbrytfunktionen
cancel.setAttribute("type", "button"); // knyt avbrytfunktionen till knappen
cancel.setAttribute("value", config.cancelButtonText); // hämta data från var config
obj.appendChild(cancel); // koppla avbrytfunktionen till knappen
// skapa knapparna
var buttons = {
'edit': edit,
'cancel': cancel
}
return buttons;
}

Postat av nilla (83.185.82.233) den 22 Juni, 2010 kl 05:32:14.


Svar på inlägget:
  • Re: Editerbar text Simon 12:00:25 06/25/10 (5)
    • Re: Editerbar text nilla 12:14:21 06/25/10 (4)
      • Re: Editerbar text nilla 13:38:31 06/25/10 (3)
        • Re: Editerbar text Simon 18:06:48 06/25/10 (2)
          • Re: Editerbar text nilla 18:29:12 06/25/10 (1)
            • Re: Editerbar text Simon 18:38:17 06/25/10 (0)


Posta ett svar:

Namn:
E-Mail:
Rubrik:
Meddelande:
Ja tack, maila mig om andra svarar på detta inlägg.
Ja tack, maila mig om andra svarar på mitt inlägg.


[ JavaScript.nu's Forum ] [ Viktigt om forumet ] [ JavaScript.nu's Startsida ]






Copyright © Omid Rouhani 1997-2022; Alla rättigheter reserverade.
Guider: [ HTML guide ] - [ JavaScript guide ] - [ DHTML guide ] - [ Perl guide ] - [ Sitemap ]