[JS] Checkboxen selecteren alleen appart bestand?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • remy007
  • Registratie: Oktober 2004
  • Laatst online: 25-09 12:27

remy007

Broodje Bakpao Helmond

Topicstarter
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
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>&nbsp;&nbsp;<strong>".stripslashes(htmlspecialchars($_CDMessageData->onderwerp))."</strong></td><td align=\"right\">&nbsp;&nbsp;<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


Acties:
  • 0 Henk 'm!

Verwijderd

Gebruik je Firebug? Dan had je gezien dat je verwijzing naar scripts.js een 404 geeft. Verander
code:
1
<script src="include/scripts.js"

dus even in
code:
1
<script src="../include/scripts.js"

Acties:
  • 0 Henk 'm!

  • remy007
  • Registratie: Oktober 2004
  • Laatst online: 25-09 12:27

remy007

Broodje Bakpao Helmond

Topicstarter
Verwijderd schreef op donderdag 30 oktober 2008 @ 20:02:
Gebruik je Firebug? Dan had je gezien dat je verwijzing naar scripts.js een 404 geeft. Verander
code:
1
<script src="include/scripts.js"

dus even in
code:
1
<script src="../include/scripts.js"
Lijkt het probleem niet te zijn, volledige url erin geplaatst in de template file voor de index/layout (ivm de nette url's die wij gebruiken!).... ga morgen verder met het kijken, in iedergeval bedankt voor het mee denken...

* V&A Advertenties * Systemen: Inventaris


Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 10:28

krvabo

MATERIALISE!

Jezus, wat post je enorm veel irrelevante tekst en code.

Verder lijkt je checkAll()-functie niet hetzelfde te doen als je check()-functie:
JavaScript:
1
2
3
4
        if (TO==TB)
            frm.allbox.checked=true;
        else
            frm.allbox.checked=false;

Het kan zijn dat ik je code verkeerd begrijp hoor (Ik snap namelijk echt niet waarom je het geklikte element op een gegeven moment zijn parent 'maakt', maargoed.)
Als jij zegt dat het wel werkt als de code net boven het formulier kan je eens proberen de regel
JavaScript:
1
    var frm = document.frm_berichtenlijst;
in de functie te zetten ipv erboven.

Een inverse-scriptje is eigenlijk nog makkelijker.
JavaScript:
1
2
3
4
5
6
7
8
9
10
function inverse(f) 
{
    for (i=0; i < f.elements.length; i++) 
    {
        if (f.elements[$i].type == "checkbox") 
        {
            f.elements[i].checked = !f.elements[i].checked;
        }
    }
}

Als argument het formulier meegeven, en tadaa. (Code komt van een welbekende nzb-indexsite)

[ Voor 22% gewijzigd door krvabo op 30-10-2008 23:05 ]

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.