Mede tweakers,
Heb een vaag probleem met een stukje JavaScript in combinatie met een PHP script. Nou is dat php script niet het probleem, dit werkt.
Het script is een berichten systeem waar mensen hun berichten kunnen markeren om vervolgens te verwijderen na het gezien te hebben. Nu wil ik er nog een "Selecteer allemaal" checkbox bij zetten, dit werkt tot op zekere hoogte. Namelijk als je de betreffende JS code in een appart .js-bestand plaatst, en de code het liefst direct op de <form> code van het formulier zet.
De code ziet er zo uit:
berichten.php
Daarbij gaat het vooral om de code binnen dit stuk:
Als ik de code om javascript aan te roepen recht voor de <form> tag plaats (en de volgende code er achter te plaatsen: <script language="javascript"> var frm = document.frm_berichtenlijst; </script>) is er geen probleem. Wanneer ik de code aan laat roepen door het .js boven in de <head></head> sectie dan werkt de hele code niet.
De betreffende JS code is:
scripts.js
Deze code heb ik vaker gebruikt, en merkte toen dit probleem ook al (2 jaar geleden), alleen nu wil ik die probleem het liefst opgelost hebben, aangezien ik bezig ben met een nieuwe website.
Ik hoop dat hier wat meer javascript-kenners bij zitten zodat ik met hulp dit probleem kan oplossen.
Voor de gene die interesse hebben om te kijken waar het fout gaat:
Ga naar http://dadas.startcool.nl/login, login als dadas met wachtwoord testpasdadas. Dit is een test account voor de nog in ontwikkeling zijnde website. Onder het menu "berichten" wanneer je ingelogd bent, dan zou je daar 2 berichten moeten vinden die met de bovenste checkbox geselecteerd moeten worden.
Alvast bedankt!
Heb een vaag probleem met een stukje JavaScript in combinatie met een PHP script. Nou is dat php script niet het probleem, dit werkt.
Het script is een berichten systeem waar mensen hun berichten kunnen markeren om vervolgens te verwijderen na het gezien te hebben. Nu wil ik er nog een "Selecteer allemaal" checkbox bij zetten, dit werkt tot op zekere hoogte. Namelijk als je de betreffende JS code in een appart .js-bestand plaatst, en de code het liefst direct op de <form> code van het formulier zet.
De code ziet er zo uit:
berichten.php
code:
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
| <? if ($_CDcookielogin == '0') { echo " U moet ingelogd zijn, om uw berichten te lezen. <br> <br> "; include("loginformulier.php"); } else { $_CDRequestUri = $_SERVER['REQUEST_URI']; $_CDRequestUriExploded = explode("/", $_SERVER['REQUEST_URI']); $_CDRequestUriMustBeInbox = "/profiel/berichten"; $_CDRequestUriMustBeSendBox = "/profiel/berichten/verzonden"; $_CDRequestUriMustBeDeletedBox = "/profiel/berichten/verwijderd"; $_CDRequestUriMustBeReadMessage = "/profiel/berichten/lezen"; echo "<table width=\"95%\">"; if ($_CDRequestUriMustBeReadMessage == "/$_CDRequestUriExploded[1]/$_CDRequestUriExploded[2]/$_CDRequestUriExploded[3]") { $_CDMessageCount = mysql_num_rows(mysql_query("SELECT * FROM cd_berichten WHERE NaarLidID = '".$_CDprofielid."' AND ID = '".$_CDRequestUriExploded[4]."'")); if ($_CDMessageCount == "1"){ $_CDMessageData = mysql_fetch_object(mysql_query("SELECT * from cd_berichten WHERE NaarLidID = '".$_CDprofielid."'")) or die(mysql_error()); $_CDVerzondenDoorData = mysql_fetch_object(mysql_query("SELECT * from cd_profielen WHERE LidID = '".$_CDMessageData->VanLidID."'")) or die(mysql_error()); echo " <tr> <td colspan=\"2\" class=\"pb_kop\"> <table width=\"100%\"> <tr> <td> <strong>".stripslashes(htmlspecialchars($_CDMessageData->onderwerp))."</strong></td><td align=\"right\"> <strong>".date("d-m-Y",$_CDMessageData->verzonden)."</strong></td> </tr> </table> </td> </tr> <tr> <td width=\"25%\" valign=\"top\" class=\"pb_left\">".$_CDVerzondenDoorData->voornaam."<br><img src=\"".$_CDrooturl."/images/profielen/".$_CDMessageData->VanLidID."/".$_CDVerzondenDoorData->avatar."\"></td> <td width=\"88%\" class=\"pb_mess\" valign=\"top\"><blockquote>".stripslashes(htmlspecialchars($_CDMessageData->bericht))."</blockquote></td> </tr> <tr> <td colspan=\"2\" class=\"pb_kop\" align=\"right\"><a href=\"/profiel/berichten/reageer/".$_CDRequestUriExploded[4]."\">Reageer</a> - <a href=\"/profiel/berichten/verstuur\">Nieuw Bericht</a></td> </tr> "; } else { echo "<tr> <td class=\"berichten_subject\"> Dit bericht is niet aan u gericht! </td> </tr>"; } } else { if ($_CDRequestUriMustBeInbox == "/$_CDRequestUriExploded[1]/$_CDRequestUriExploded[2]") { $_CDMessageBoxType = "1"; echo "<form name=\"frm_berichtenlijst\"><tr> <td> <input class=\"check\" name=\"allbox\" type=\"checkbox\" onClick=\"CheckAll();\" title=\"Alle berichten selecteren of selectie van alle berichten ongedaan maken\" tabindex=\"105\" value=\"ON\"> </td> <td> Afkomstig van </td> <td> Onderwerp </td> <td> Datum </td> </tr>"; $_CDMessageSelect = "SELECT * FROM cd_berichten WHERE NaarLidID = '".$_CDprofielid."' AND MessageBoxType = '".$_CDMessageBoxType."' ORDER BY verzonden DESC"; $_CDMessageQuery = mysql_query($_CDMessageSelect)or die(mysql_error()); while($_CDMessageList = mysql_fetch_object($_CDMessageQuery)){ $_CDVerzondenDoorData = mysql_fetch_object(mysql_query("SELECT * from cd_profielen WHERE LidID = '".$_CDMessageList->VanLidID."'")) or die(mysql_error()); echo "<tr> <td> <input type='checkbox' name='markdel[]' value='".$_CDMessageList->ID."' onClick='CheckItem(this);'> </td> <td> <a href=\"/profiel/".$_CDMessageList->VanLidID."\">".$_CDVerzondenDoorData->voornaam."</a> </td> <td> <a href=\"/profiel/berichten/lezen/".$_CDMessageList->ID."\">".$_CDMessageList->onderwerp."</a> </td> <td> ".date("d-m-Y",$_CDMessageList->verzonden)." </td> </tr>"; } echo "</form>"; } elseif ($_CDRequestUriMustBeSendBox == "/$_CDRequestUriExploded[1]/$_CDRequestUriExploded[2]/$_CDRequestUriExploded[3]") { $_CDMessageBoxType = "2"; $_CDMessageSelect = "SELECT * FROM cd_berichten WHERE NaarLidID = '".$_CDprofielid."' AND MessageBoxType = '$_CDMessageBoxType' ORDER BY verzonden DESC"; $_CDMessageQuery = mysql_query($_CDMessageSelect)or die(mysql_error()); while($_CDMessageList = mysql_fetch_object($_CDMessageQuery)){ echo "<tr><td>".$_CDMessageList->onderwerp."</td></tr>"; } } elseif ($_CDRequestUriMustBeDeletedBox == "/$_CDRequestUriExploded[1]/$_CDRequestUriExploded[2]/$_CDRequestUriExploded[3]") { $_CDMessageBoxType = "3"; $_CDMessageSelect = "SELECT * FROM cd_berichten WHERE NaarLidID = '".$_CDprofielid."' AND MessageBoxType = '$_CDMessageBoxType' ORDER BY verzonden DESC"; $_CDMessageQuery = mysql_query($_CDMessageSelect)or die(mysql_error()); while($_CDMessageList = mysql_fetch_object($_CDMessageQuery)){ echo "<tr><td>".$_CDMessageList->onderwerp."</td></tr>"; } } } echo "</table>"; } ?> |
Daarbij gaat het vooral om de code binnen dit stuk:
code:
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
| ¨ echo "<form name=\"frm_berichtenlijst\"><tr> <td> <input class=\"check\" name=\"allbox\" type=\"checkbox\" onClick=\"CheckAll();\" title=\"Alle berichten selecteren of selectie van alle berichten ongedaan maken\" tabindex=\"105\" value=\"ON\"> </td> <td> Afkomstig van </td> <td> Onderwerp </td> <td> Datum </td> </tr>"; $_CDMessageSelect = "SELECT * FROM cd_berichten WHERE NaarLidID = '".$_CDprofielid."' AND MessageBoxType = '".$_CDMessageBoxType."' ORDER BY verzonden DESC"; $_CDMessageQuery = mysql_query($_CDMessageSelect)or die(mysql_error()); while($_CDMessageList = mysql_fetch_object($_CDMessageQuery)){ $_CDVerzondenDoorData = mysql_fetch_object(mysql_query("SELECT * from cd_profielen WHERE LidID = '".$_CDMessageList->VanLidID."'")) or die(mysql_error()); echo "<tr> <td> <input type='checkbox' name='markdel[]' value='".$_CDMessageList->ID."' onClick='CheckItem(this);'> </td> <td> <a href=\"/profiel/".$_CDMessageList->VanLidID."\">".$_CDVerzondenDoorData->voornaam."</a> </td> <td> <a href=\"/profiel/berichten/lezen/".$_CDMessageList->ID."\">".$_CDMessageList->onderwerp."</a> </td> <td> ".date("d-m-Y",$_CDMessageList->verzonden)." </td> </tr>"; } echo "</form>"; |
Als ik de code om javascript aan te roepen recht voor de <form> tag plaats (en de volgende code er achter te plaatsen: <script language="javascript"> var frm = document.frm_berichtenlijst; </script>) is er geen probleem. Wanneer ik de code aan laat roepen door het .js boven in de <head></head> sectie dan werkt de hele code niet.
De betreffende JS code is:
scripts.js
code:
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
| var rooturl = 'http://dadas.startcool.nl/include'; function toggle_username(userid) { if (window.XMLHttpRequest) { http = new XMLHttpRequest(); } else if (window.ActiveXObject) { http = new ActiveXObject("Microsoft.XMLHTTP"); } handle_username = document.getElementById(userid); var url = rooturl + '/ajax.php?'; if (handle_username.value.length > 0) { var fullurl = url + 'do_username=check_username_exists&username=' + encodeURIComponent(handle_username.value); http.open("GET", fullurl, true); http.send(null); http.onreadystatechange = statechange_username; } else { document.getElementById('username_exists').innerHTML = ''; } } function statechange_username() { if (http.readyState == 4) { var xmlObj = http.responseXML; var html = xmlObj.getElementsByTagName('result_username').item(0).firstChild.data; document.getElementById('username_exists').innerHTML = html; } } function toggle_emailaddress(emailid) { if (window.XMLHttpRequest) { http = new XMLHttpRequest(); } else if (window.ActiveXObject) { http = new ActiveXObject("Microsoft.XMLHTTP"); } handle_emailaddress = document.getElementById(emailid); var url = rooturl + '/ajax.php?'; if (handle_emailaddress.value.length > 0) { var fullurl = url + 'do_emailaddress=check_emailaddress_exists&emailaddress=' + encodeURIComponent(handle_emailaddress.value); http.open("GET", fullurl, true); http.send(null); http.onreadystatechange = statechange_emailaddress; } else { document.getElementById('emailaddress_exists').innerHTML = ''; } } function statechange_emailaddress() { if (http.readyState == 4) { var xmlObj = http.responseXML; var html = xmlObj.getElementsByTagName('result_emailaddress').item(0).firstChild.data; document.getElementById('emailaddress_exists').innerHTML = html; } } function FormEnableregistreren() { document.frm_registreren.registreren.disabled=false; } var frm = document.frm_berichtenlijst; function CheckAll(isOnload) { var trk=0; for (var i=0;i<frm.elements.length;i++) { var e = frm.elements[i]; if ((e.name != 'allbox') && (e.type=='checkbox')) { if (isOnload != 1) { trk++; e.checked = frm.allbox.checked; if (frm.allbox.checked) { hL(e); } else { dL(e); } if (frm.nullbulkmail) frm.nullbulkmail.disabled = frm.notbulkmail.disabled; } else { e.tabIndex = i; if (e.checked) { hL(e); } else { dL(e); } } } } } function CheckItem(CB) { if (CB.checked) hL(CB); else dL(CB); var TB=TO=0; for (var i=0;i<frm.elements.length;i++) { var e = frm.elements[i]; if ((e.name != 'allbox') && (e.type=='checkbox')) { TB++; if (e.checked) TO++; } } if (TO==TB) frm.allbox.checked=true; else frm.allbox.checked=false; } function hL(E) { while (E.tagName!="TR") { E=E.parentNode; } E.className = "H"; } function dL(E) { while (E.tagName!="TR") { E=E.parentNode; } E.className = ""; } |
Deze code heb ik vaker gebruikt, en merkte toen dit probleem ook al (2 jaar geleden), alleen nu wil ik die probleem het liefst opgelost hebben, aangezien ik bezig ben met een nieuwe website.
Ik hoop dat hier wat meer javascript-kenners bij zitten zodat ik met hulp dit probleem kan oplossen.
Voor de gene die interesse hebben om te kijken waar het fout gaat:
Ga naar http://dadas.startcool.nl/login, login als dadas met wachtwoord testpasdadas. Dit is een test account voor de nog in ontwikkeling zijnde website. Onder het menu "berichten" wanneer je ingelogd bent, dan zou je daar 2 berichten moeten vinden die met de bovenste checkbox geselecteerd moeten worden.
Alvast bedankt!
* V&A Advertenties * Systemen: Inventaris