Ik wil een script maken dat aangemaakte links kan verwijderen. Wat ik nu heb is een AJAX script die als output een lijst met links op het scherm genereert, met naast elke link een plaatje met een verwijder kruisje erop. De bedoeling is dat als mensen op het kruisje klikken, de link verwijderd wordt d.m.v. AJAX en PHP. Het script dat de links ophaalt zit als volgt in elkaar:
Met een HTML dat er zo uitziet:
En tot slot het PHP connector script:
Nou dacht ik dat het als volgt gedaan kon worden: Ik geef elk kruisje een id mee (de 1e id = 1, de 2e id = 2 enz.) En dan na de table nog een hidden input field met daarin de waarde van het aantal id's. Vervolgens laat ik bij window.onload = function() een loopje lopen die aan elk kruisje een een onclick event koppelt met een functie. Die functie doet dan het AJAX gedeelte om de link te verwijderen.
Mijn eerste vraag is, hoe kan ik dat loopje omzeilen, want ik kan me voorstellen dat het bij lange lijsten links nog wel eens traag kan worden.
De tweede vraag heeft betrekking op het later aankoppelen van events, want bij HTML zou dit werken: onclick = doSomething(this). Maar hoe doe ik dat met events die ik er later aan koppel? (Ik wil de events er per se later aan koppelen).
Alvast bedankt
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| window.onload = function() { XmlHttp = GetXmlHttpObject(); var url = "index.php?action=getlinks"; url = url + "&sid=" + Math.random(); XmlHttp.onreadystatechange = stateChanged; XmlHttp.open("GET", url, true); XmlHttp.send(null); document.getElementById("loader").style.display = "block"; document.getElementById("submit").disabled = true; var submitId = document.getElementById("submit"); addEvent(submitId, 'click', submit); } function GetXmlHttpObject() { if (window.XMLHttpRequest) { //IE7+, Firefox, Chrome, Opera, Safari return new XMLHttpRequest(); } if (window.ActiveXObject) { //IE6, IE5 return new ActiveXObject("Microsoft.XMLHTTP"); } return null; } function stateChanged() { if (XmlHttp.readyState == 4) { document.getElementById("links").innerHTML = XmlHttp.responseText; document.getElementById("loader").style.display = "none"; document.getElementById("submit").disabled = false; } } function submit() { XmlHttp = GetXmlHttpObject(); var name = document.getElementById("newName").value; var uri = document.getElementById("newUri").value; var url = "index.php?action=submit&name=" + name + "&uri=" + uri; url = url + "&sid=" + Math.random(); XmlHttp.onreadystatechange = stateChanged; XmlHttp.open("GET", url, true); XmlHttp.send(null); document.getElementById("loader").style.display = "block"; document.getElementById("submit").disabled = true; } function addEvent(element, type, fn) { if (element.addEventListener) { element.addEventListener(type, fn, true); } else if (element.attachEvent) { element.attachEvent("on"+type, fn); } } |
Met een HTML dat er zo uitziet:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
| <h1>Alle bestanden op de lokale webserver:</h1><br /> <div id = 'loader' style = 'display: none'> <img src = 'loader.gif' /> <br /><br /> </div> <div id = 'links'> </div> <br /> Naam van de nieuwe link: <br /><input type = 'text' id = 'newName' /><br /> Adres waarna de link moet verwijzen: <br /><input type = 'text' id = 'newUri' /><br /> <input id = 'submit' type = 'submit' value = 'Voeg link toe'/><br /> |
En tot slot het PHP connector script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
| <?php if ($_GET['action'] == 'submit') { if(!empty($_GET['name']) and !empty($_GET['uri'])) { $name = $_GET['name']; $link = $_GET['uri']; mysql_query("INSERT INTO links (name, link) VALUES ('$name', '$link')", $mysql); echoContents(); } } if ($_GET['action'] == 'getlinks') { echoContents(); } function echoContents() { global $mysql; $links = mysql_query("SELECT name, link FROM links", $mysql); if (mysql_num_rows($links) == 0) { echo "<i>Nog geen links toegevoegd</i>"; } else { echo "<b>Links:</b>"; echo "<table cellspacing = '0' celpadding = '0' border = '0'>"; while(list($name, $link) = mysql_fetch_row($links)) { echo "<tr>"; echo "<td><a href = '" . $link . "'>" . $name . "</a></td>"; echo "<td class = 'icon'><a href = '#'><img border = '0' src = 'close_na.gif' /></a></td>"; echo "</tr>"; } echo "</table>"; } echo "<br><br>"; exit; } ?> |
Nou dacht ik dat het als volgt gedaan kon worden: Ik geef elk kruisje een id mee (de 1e id = 1, de 2e id = 2 enz.) En dan na de table nog een hidden input field met daarin de waarde van het aantal id's. Vervolgens laat ik bij window.onload = function() een loopje lopen die aan elk kruisje een een onclick event koppelt met een functie. Die functie doet dan het AJAX gedeelte om de link te verwijderen.
Mijn eerste vraag is, hoe kan ik dat loopje omzeilen, want ik kan me voorstellen dat het bij lange lijsten links nog wel eens traag kan worden.
De tweede vraag heeft betrekking op het later aankoppelen van events, want bij HTML zou dit werken: onclick = doSomething(this). Maar hoe doe ik dat met events die ik er later aan koppel? (Ik wil de events er per se later aan koppelen).
Alvast bedankt