Udfra hvad du postede, så har jeg lavet et lille script som sender data til editsave.php. Det lader til at virke, hele processen, men dog så får jeg "undefined" indsat i databasen. Her er scriptet:
<html> <head> <link href="../style.css" type="text/css" rel="stylesheet" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <script type="text/javascript"> /* ---------------------------- */ /* XMLHTTPRequest Enable */ /* ---------------------------- */ function createObject() { var request_type; var browser = navigator.appName; if(browser == "Microsoft Internet Explorer"){ request_type = new ActiveXObject("Microsoft.XMLHTTP"); }else{ request_type = new XMLHttpRequest(); } return request_type; }
var http = createObject(); /* -------------------------- */ /* INSERT */ /* -------------------------- */ /* Required: var nocache is a random number to add to request. This value solve an Internet Explorer cache issue */ var nocache = 0; function insert() { // Optional: Show a waiting message in the layer with ID login_response document.getElementById('insert_response').innerHTML = "To Sek .. " // Required: verify that all fileds is not empty. Use encodeURI() to solve some issues about character encoding. var ujokeedit= encodeURI(document.getElementById('ujokeedit').value); // Set te random number to add to URL request nocache = Math.random(); // Pass the login variables like URL variable http.open('get', 'editsave.php?ujokeedit='+ujokeedit+'&nocache = '+nocache); http.onreadystatechange = insertReply; http.send(null); } function insertReply() { if(http.readyState == 4){ var response = http.responseText; // else if login is ok show a message: "Site added+ site URL". document.getElementById('insert_response').innerHTML = 'Respons: '+response; } } </script> <? include "tilslut.php"; $query = mysql_query("SELECT * FROM member_admin") or die(mysql_error()); $row = mysql_fetch_array($query); ?> <p> <span id="ujokeedit" onclick="this.contentEditable=true; this.focus();return true;" onblur="this.contentEditable=false; java script:insert(); return true;"> <?=$row["ujoke"]; ?> </span> <div id="insert_response"></div> </p>
Med det får man en tanke om at variablen "ujokeedit" er udefineret, men det er den altså ikke, og den burde ikke give tom værdi. Hvad har jeg gjort forkert?
InnerHTML virkede perfekt :). Har et spørgsmål. Er det muligt at "designe" det felt du ændrer i.. måske gøre det lidt større, eller smide en hvid baggrund bagi, ligesom en input felt?
Jeg ville have lavet løsningen anderledes fra starten, så den skifter teksten ud med et input element. Det gør det hele lidt nemmere at styre.
Jeg har lavet denne her lille test med kommentarer. <script language="JavaScript"> function myEditable(e, act) { if (act == 'click') { // lav indholdet af span om til et input felt og sæt et onblue event på den e.innerHTML = '<input type="text" value="'+e.innerHTML+'" onblur="myEditable(this, \'edit\')" />';
// fjern span onclick eventen e.onclick = null;
} else if (act == 'edit') { // hent span elementet igen var parentElement = e.parentNode;
// Opdater span teksten, e.value er den nye værdi parentElement.innerHTML = e.value;
// placer onclick eventen igen på span elementet (function(e){ e.onclick = function() { myEditable(e, 'click'); }; })(parentElement);
}
} </script> <p> <span onclick="myEditable(this, 'click');">Click to Edit me</span> </p>
Ja det var helt fra start den idé jeg havde med sådan en input box.. Hvordan skal jeg inkludere det jeg har kodet med at sende data videre til insert.php (tidligere indlæg), ind i det her? Ved ik rigtigt hvordan jeg skal gøre det?
Har for mig det skal gøres omkring her:
// Opdater span teksten, e.value er den nye værdi parentElement.innerHTML = e.value;
Hvordan skal jeg sende/tage imode e.value, kan jeg bruge: var tekstny= encodeURI(document.getElementById('e.value').innerHTML);
når den skal tage imod (og så sende videre til insert.php) ? Men er e.value er jo ikke et element med id? eller hvad? Men jeg skal jo også sende den ind.. blir helt forvirret.
Tog mig vist sammen efter jeg skrev indlægget, og fik klaret det selv! Skriv svar begge to, da i begge to har været hjælpevillige. Her er min løsning, til jer som ønsker noget lign.: <script language="JavaScript"> function myEditable(e, act) { if (act == 'click') { // lav indholdet af span om til et input felt og sæt et onblue event på den e.innerHTML = '<input type="text" value="'+e.innerHTML+'" onblur="myEditable(this, \'edit\')" />';
// fjern span onclick eventen e.onclick = null;
} else if (act == 'edit') { var nocache = 0; // hent span elementet igen var parentElement = e.parentNode;
// Opdater span teksten, e.value er den nye værdi parentElement.innerHTML = e.value; nocache = Math.random(); var tekstny= e.value; http.open('get', 'editsave.php?tekstny='+tekstny+'&nocache = '+nocache); http.onreadystatechange = insertReply; http.send(null); // placer onclick eventen igen på span elementet (function(e){ e.onclick = function() { myEditable(e, 'click'); }; })(parentElement);
} function insertReply() { if(http.readyState == 4){ var response = http.responseText; // else if login is ok show a message: "Site added+ site URL". document.getElementById('insert_response').innerHTML = ''+response; } }
Giv alle point til intenz: Han har brugt mest tid.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.