claudio: Safari und der Eventhandler onchange

'Moin Forum,

Weiss irgend jemand, warum Safari den JS Eventhandler 'onchange' bei mir nicht richtig interpretiert? Es geht darum, dass ich it einer Checkbox andere Checkboxen setzen oder leeren kann. Mit Mozilla, IE und Opera klappt es. Andere Eventhandler (z.B. AlertFenster bei onClick oder onSubmit) klappen.

Im Code sieht das in etwa so aus:

HTML (mit PHP in einer Schleife mehrere Einträge generiert, aus Faulheit habe ich die Escape Slashes jetzt drin gelassen):
--snip--
<?php

...

<form name="includeForm" action="{$_SERVER["PHP_SELF"]}" method="POST">

foreach ($irgendwas as $sid) {

<input type="checkbox" name="includeStudentID[]" value="$sid">

}

<input type="checkbox" name="allBoxes" value="" onChange="javascript:setCheckboxes('includeForm');">

...

?>

--snap--

in der inkludierten Javascript Datei steht:
--snip--

function setCheckboxes(formName) {
    var box_count = document.forms[formName].elements.length;
    for (var i = 0; i < box_count; i++) {
        document.forms[formName].elements[i].checked = document.forms[formName].elements['allBoxes'].checked;
    }
    return true;
}

--snap--

Danke für Eure Hilfe

claudio

  1. Weiss irgend jemand, warum Safari den JS Eventhandler 'onchange' bei mir nicht richtig interpretiert? Es geht darum, dass ich it einer Checkbox andere Checkboxen setzen oder leeren kann. Mit Mozilla, IE und Opera klappt es. Andere Eventhandler (z.B. AlertFenster bei onClick oder onSubmit) klappen.

    ohne jezt nachzugucken ich glaube nicht das checkboxen einen event onchange feuern. onclick ist der dafür üblicherweise verwendete.

    <input type="checkbox" name="allBoxes" value="" onChange="javascript:setCheckboxes('includeForm');">

    das Label 'javascript:' ist hier überflüssig und führt in Browsern die keine Labels kennen zu einer Fehlermeldung.

    Außerdem ist es hier sinnvoller die refrenz auf das Formular zu übergeben.
    onChange="setCheckboxes(this.form);">

    und dann entsprechend:

    function setCheckboxes(form)
    {
    var box_count = form.elements.length;
    for (var i = 0; i < box_count; i++)
    form.elements[i].checked = form.elements['allBoxes'].checked;
    }

    Struppi.

    1. Hallo Struppi,

      ohne jezt nachzugucken ich glaube nicht das checkboxen einen event onchange feuern. onclick ist der dafür üblicherweise verwendete.

      Ich denke, das tun sie (beim Opera klappt's ja auch, und der ist besonders streng, was Korrektheit anbelangt)

      das Label 'javascript:' ist hier überflüssig und führt in Browsern die keine Labels kennen zu einer Fehlermeldung.

      Das koennte ein Hinweis sein.

      Außerdem ist es hier sinnvoller die refrenz auf das Formular zu übergeben.
      onChange="setCheckboxes(this.form);">

      und dann entsprechend:

      function setCheckboxes(form)

      Das ist wohl einen Versuch wert. Allerdings habe ich auf dieser Seite mehrere Formulare (zuerst die Auswahl der Gruppe, welche gecheckt werden soll ueber ein Dropdown, dann in diesem nun besprochenen Formular die Mitglieder der ausgewählten Gruppe zu (un-)checken. Aus Darstellungsgründen ist alles auf einer Seite)

      Danke vorerst, ich lasse von mir hoeren, wenn es klappt (oder auch nicht)

      Gruss claudio

      1. ohne jezt nachzugucken ich glaube nicht das checkboxen einen event onchange feuern. onclick ist der dafür üblicherweise verwendete.

        Ich denke, das tun sie (beim Opera klappt's ja auch, und der ist besonders streng, was Korrektheit anbelangt)

        selfhtml sagt nichts davon.
        http://selfhtml.teamone.de/javascript/sprache/eventhandler.htm#onchange

        Außerdem ist es hier sinnvoller die refrenz auf das Formular zu übergeben.
        onChange="setCheckboxes(this.form);">

        und dann entsprechend:

        function setCheckboxes(form)
        Das ist wohl einen Versuch wert. Allerdings habe ich auf dieser Seite mehrere Formulare (zuerst die Auswahl der Gruppe, welche gecheckt werden soll ueber ein Dropdown, dann in diesem nun besprochenen Formular die Mitglieder der ausgewählten Gruppe zu (un-)checken. Aus Darstellungsgründen ist alles auf einer Seite)

        Mit meiner Variante biste flexibler, vorrausgesetzt die Box mit der du alle cheboxen selektierst ist im gleichen Formular. ansonsten ist deine Variante vorzuziehen.

        Struppi.

        1. Hallo nochmals, Struppi,

          selfhtml sagt nichts davon.
          http://selfhtml.teamone.de/javascript/sprache/eventhandler.htm#onchange

          »»
          doch:
          <Zitat SELFHTML>
          Nach HTML 4.0 und JavaScript 1.2 (Netscape) erlaubt in folgenden HTML-Tags:
          <input> <select> <textarea>
          ^^^^^^^
          </Zitat>

          Sorry, habe ich vorgängig überlesen.
          :)

          Mit meiner Variante biste flexibler, vorrausgesetzt die Box mit der du alle cheboxen selektierst ist im gleichen Formular. ansonsten ist deine Variante vorzuziehen.

          Da hast Du recht, und sie befinden sich alle im selben Formular. Ich bin jetzt noch an etwas Anderem dran, aber bis heute Nachmittag werde ich das ausprobiert haben und Bescheid geben.

          Danke für den Input.

          Gruss claudio

          1. Ich bezweifle aber nach wie vor das onchange für checkboxen ein Event ist, da onchange ja feuert, wenn der Wert sich ändert, das tust du aber nicht durch anklicken.

            Struppi.

            1. Hallo Struppi,

              Ich bezweifle aber nach wie vor das onchange für checkboxen ein Event ist, da onchange ja feuert, wenn der Wert sich ändert, das tust du aber nicht durch anklicken.

              Asche ueber mein Haupt. Mit onClick funktioniert es. Offensichtlich ist onChange tatsächlich kein Event für Checkboxen: zumindest nicht offiziell, da wie gesagt der Mozilla, IE und der Opera das von mir gewünschte Resultat mit onChange lieferten. Naja, hauptsache, jetzt läuft es korrekt.

              Vielen Dank

              Gruss claudio