Hier sind einführende Hinweise [mehr]

Events

Nächste Vorherige Lösung Punkte

Es geht um DOM-Events (allgemein). Richtigen Aussagen bitte ankreuzen.
Zu jedem Event gehört ein Event-type [mehr]
Das Hinzufügen von EventTarget.addEventListener-Methoden zu einem HTML-Element ( ab DOM-Level 2 ) kann mit Hilfe von on...-Event-Properties erfolgen, wie z.B. onclick="handleClick()" erfolgen [mehr]
Zu einem Zeigegerät gehört die typische Ausführungsfolge mousemove, mouseover, mouseenter, (mousemove falls multiple events), mouseout, mouseleave [mehr]
Zu einem Zeigegerät (mit button-Element) gehört die typische Ausführungsfolge mousedown, ( u.U. mousemove ), mouseup, click, ( u.U. mousemove ), mousedown, ( u.U. mousemove ), mouseup, click, dblclick [mehr]
Zu DOM gehören Event-Handler, wie z.B. abort, afterprint, beforeprint, beforeunload, blur, canplay, canplaythrough, change, click, contextmenu, cuechange, dblclick, drag, dragend, dragenter, dragleave, dragover, dragstart, drop, durationchange, emptied, ended, error, focus, hashchange, input, invalid, keydown, keypress, keyup, load, loadeddata, loadedmetadata, loadstart, message, mousedown, mousemove, mouseout, mouseover, mouseup, mousewheel, offline, online, pause, play, playing, pagehide, pageshow, popstate, progress, ratechange, reset, resize, scroll, seeked, seeking, select, show, stalled, storage, submit, suspend, timeupdate, unload, volumechange, waiting
Es geht um DOM-Events nach W3C (insbesondere DOM Level 2). Richtigen Aussagen bitte ankreuzen.
Zu den DOM-Events gehören die Maus-Ereignisse click, dblclick, mousedown, mousemove, mouseover, mouseout, mouseup
Zu den DOM-Events gehören die Tasten-Ereignisse keydown, keypress, keyup
Zu den DOM-Events gehören die Sytem/Frame/Window-Ereignisse abort, error, load, resize, scroll, unload
Zu den DOM-Events gehören die Form-Ereignisse blur, change, focus, reset, select, submit
Zu einem Event-Objekt gehören die Properties bubbles, cancelable, currentTarget, eventPhase, target, timeStamp, type und die Methoden initEvent(), preventDefault(), stopPropagation() und die Konstanten AT_TARGET, BUBBLING_PHASE, CAPTURING_PHASE
Zu einem DocumentEvent-Objekt gehören die Methoden addEventListener(), dispatchEvent(), removeEventListener()
Zu einem EventTarget-Objekt gehört die Methoden createEvent()
Zu einem EventListener-Objekt gehören und
load- und scroll-Ereignisse sind asynchron.
Events nach HTML5 (W3C Working Draft 29 March 2012)
Gemäß der "Event-Handler-IDL" ( Schnittstellenbeschreibungssprache ) gehören zum Window-Object die Attribute: abort, afterprint, beforeprint, beforeunload, blur, canplay, canplaythrough, change, click, contextmenu, cuechange, dblclick, drag, dragend, dragenter, dragleave, dragover, dragstart, drop, durationchange, emptied, ended, error, focus, hashchange, input, invalid, keydown, keypress, keyup, load, loadeddata, loadedmetadata, loadstart, message, mousedown, mousemove, mouseout, mouseover, mouseup, mousewheel, offline, online, pause, play, playing, pagehide, pageshow, popstate, progress, ratechange, reset, resize, scroll, seeked, seeking, select, show, stalled, storage, submit, suspend, timeupdate, unload, volumechange, waiting [mehr]
Gemäß der "Event-Handler-IDL" ( Schnittstellenbeschreibungssprache ) gehören zum Window-Object die Attribute: abort, afterprint, beforeprint, beforeunload, blur, canplay, canplaythrough, change, click, contextmenu, cuechange, dblclick, drag, dragend, dragenter, dragleave, dragover, dragstart, drop, durationchange, emptied, ended, error, focus, hashchange, input, invalid, keydown, keypress, keyup, load, loadeddata, loadedmetadata, loadstart, message, mousedown, mousemove, mouseout, mouseover, mouseup, mousewheel, offline, online, pause, play, playing, pagehide, pageshow, popstate, progress, ratechange, reset, resize, scroll, seeked, seeking, select, show, stalled, storage, submit, suspend, timeupdate, unload, volumechange, waiting
Der Event-Callback-Funktion werden bei einem mousedown-Event die Maus-Kontext-Informationen übergeben, wie z.B.
Event.target: topmost event target
UIEvent.view: defaultView
MouseEvent.screenX: value based on the pointer position on the screen
MouseEvent.screenY: value based on the pointer position on the screen
MouseEvent.clientX: value based on the pointer position within the viewport
MouseEvent.clientY : value based on the pointer position within the viewport
MouseEvent.altKey: true if 'Alt' modifier was active, otherwise false
MouseEvent.ctrlKey: true if 'Control' modifier was active, otherwise false
MouseEvent.shiftKey: true if 'Shift' modifier was active, otherwise false
MouseEvent.metaKey: true if 'Meta' modifier was active, otherwise false
MouseEvent.button: value based on current button pressed
MouseEvent.buttons: value based on all buttons current depressed, 0 if no buttons pressed
MouseEvent.relatedTarget: null
[mehr]
Die folgende Ereigniss-Typ-Event-Zuordnung ist in DOM Lever 3 :
blur (FocusEvent)
focus (FocusEvent)
focusin (FocusEvent)
focusout (FocusEvent)
keydown (KeyboardEvent)
keypress (KeyboardEvent)
keyup (KeyboardEvent)
click (MouseEvent)
dblclick (MouseEvent)
mousedown (MouseEvent)
mouseenter (MouseEvent)
mouseleave (MouseEvent)
mousemove (MouseEvent)
mouseout (MouseEvent)
mouseover (MouseEvent)
mouseup (MouseEvent)


abort (Event)
error (Event)
load (Event)
select (Event)
unload (Event)

resize (UIEvent)
scroll (UIEvent)
wheel (WheelEvent)
compositionstart (CompositionEvent)
compositionupdate (CompositionEvent)
compositionend (CompositionEvent)
[mehr]
Es geht um die Ausführungsfolge von DOM-Event-Funktionen am Beispiel eines a-Tags. Richtige Aussagen bitte ankreuzen.
<script>
function myfunc(x, s) { 
var str = "x="+x+" mit typeof x=" + typeof x +"\n";
    str += "s="+s+" mit typeof s=" + typeof s; 
    window.alert(str);
}
</script>

<a href="javascript:void(0);"
   onclick="myfunc((4711.321).toFixed(1), 'mystring'.replace(/[s-z]/gi,''));">
   teste 
</a>
Das a-Tag ist fehlerhaft, weil im a-Tag das href vor onclick steht und void(0) nichts bewirkt.
Ein Klick auf das a-Tag ergibt eine alert-Box-Anzeige und weil beim onclick-Property das return false fehlt, erfolgt bei der href-Ausführung, die nach der onclick="..."-Ausführung erfolgt, eine Fehlermeldung.
Ein Klick auf das a-Tag ergibt die Anzeige:
x=4711.321 mit typeof x=string
s=mystring mit typeof s=string
Ein Klick auf das a-Tag ergibt die Anzeige:
x=4711.3 mit typeof x=string
s=mring mit typeof s=string
Bei einer ul-Liste soll die Weitergabe der bubble-Events untersucht werden.
<script> var arr = [ ]; </script>

<ul    id="ul_0"   onclick="arr.push(this.id);return confirm(this.id);">
<li    id="li_0"   onclick="arr.push(this.id);return confirm(this.id);"> li_0
    <a id="li_0_a" onclick="arr.push(this.id);return confirm(this.id);"
          href="javascript:alert('href: li_0_a');"> li_0_a </a>
</li><li id="li_1"   onclick="arr.push(this.id);return confirm(this.id);"> li_1
    <a         id="li_1_a" onclick="arr=[];arr.push(this.id);return confirm(this.id);" 
          href="javascript:alert('href: li_1_a arr = '+arr.join(' | '));"> li_1_a </a>
</li></ul>

Teste:

Ein Mausklick auf li_1_a kann folgende Anzeige-Klick-Folgen ergeben:
Anzeige von confirm[ li_1_a ] dann Cancel-Klick, 
Anzeige von confirm[ li_1   ] dann Cancel-Klick, 
Anzeige von confirm[ ul_0   ] dann Cancel-Klick 
Ein Mausklick auf li_1_a kann folgende Anzeige-Klick-Folgen ergeben:
confirm[ li_1_a       ] dann OK-Klick, 
confirm[ li_1         ] dann OK-Klick , 
confirm[ ul_0         ] dann OK-Klick,
alert  [ href: li_1_a arr = li_1_a | li_1 | ul_0 ]
Wird bei einem Mausklick auf li_1_a in der folgenden confirm-Anzeige-Klick-Folgen mindstens einmal Cancel gekllickt, so erfolgt keine alert-Anzeige [ href: li_1_a ].
Bei einer dl-Liste soll die Weitergabe der bubble-Events untersucht werden.
<dl       id="dl_0"   onclick="return confirm(this.id);">
 <dt      id="dt_0"   onclick="return confirm(this.id);"> dt_0
 </dt><dd id="dd_0"   onclick="return confirm(this.id);"> dd_0
       <a id="dd_0_a" onclick="return confirm(this.id);"
                      href="javascript:alert('href: dd_0_a');"> dd_0_a </a>

 </dd><dt id="dt_1"   onclick="return confirm(this.id);"> dt_1
 </dt><dd id="dd_1"   onclick="return confirm(this.id);"> dd_1
       <a id="dd_1_a" onclick="return confirm(this.id);"
                      href="javascript:alert('href: dd_1_a');"> dd_1_a </a>
</dd></dl>

Teste:

dt_0
dd_0 dd_0_a
dt_1
dd_1 dd_1_a
Ein Mausklick auf dd_1_a kann folgende Anzeige-Klick-Folgen ergeben:
Anzeige von confirm[ dl_0   ] dann Cancel-Klick, 
Anzeige von confirm[ dd_1   ] dann Cancel-Klick, 
Anzeige von confirm[ dd_1_a ] dann Cancel-Klick 
Ein Mausklick auf dd_1_a kann folgende Anzeige-Klick-Folgen ergeben:
confirm[ dl_0         ] dann OK-Klick, 
confirm[ dd_1         ] dann OK-Klick, 
confirm[ dd_1_a       ] dann OK-Klick,
alert  [ href: dd_1_a ] 
Wird bei einem Mausklick auf dd_1_a in der folgenden confirm-Anzeige-Klick-Folgen mindstens einmal Cancel gekllickt, so erfolgt keine alert-Anzeige [ href: dd_1_a ].
Zu den DOM-Events gehören die Form-Ereignisse. Das folgende Formular ist ein Beispiel. Richtige Aussagen bitte ankreuzen.
<form action="javascript:action()" onsubmit="return !!confirm('OK oder Cancel');">
  <input type="submit" value="Sende" /><input type="submit" value="Sende" />
  <input type="checkbox" name="CHECKBOX0" value="myCheck 0" checked="checked" />
  <input type="radio"    name="RADIO" value="myRadio 0" checked="checked" />
  <input type="radio"    name="RADIO" value="myRadio 1" />
  <input type="hidden"   name="TEXT0" id="TEXT0" value="Text-Eingabe hidden" />
  <textarea name="TA0" rows="2" cols="40"><script>alert('TA0');</script>
  </textarea> 
</form>

<script>
function action() {
var f   = document.getElementsByTagName('form')[0],
    inp = f.getElementsByTagName('input'),
    ta  = f.getElementsByTagName('textarea')[0].value,
    els = f.elements, str = els[5].value,
    arr = [ inp.length, els.length, inp[1].value, f.CHECKBOX0.checked,
                                    inp[3].value, f.RADIO[1].checked ];
    alert('arr=' + arr + '\nta=' + ta+ '\nstr=' + str);
}
alert(window.document.getElementsByTagName('form')[0].getElementsByTagName('input').getElementById('TEXT0').value);
alert(document.forms[0]['input']['TEXT0']['value']);
</script>
Ein <input type="submit" value="Sende" />-Tags muß im Formular das letzte input-Tag sein. In einem Formular sind keine zwei submit-Tags erlaubt.
Infolge von <textarea name="TA0" rows="3" cols="80"><script>alert('TA0');</script></textarea> liegt ein HTML5 - Validierungsfehler vor.
<form action="javascript: ..." ist unzulässig, denn ein <form action="..." dient dem Aufruf der "server-ziel-url" für die Verarbeitung der Formulardaten.
Wird die Funktion action ausgeführt, so ergibt sich für inp.length die Zahl 5
Wird die Funktion action ausgeführt, so ergibt sich für f.elements.length die Zahl 5
Wird die action()-Funktion ausgeführt, so ergibt sich
arr = [5, 6, myCheck 0, true, myRadio 1, false]
ta = <script>alert('TA0');</script>
str = <script>alert('TA0');</script>
Bei einem Maus-Klick auf einen der beiden submit-Button wird das onsubmit-Ereignis vom form-Tag aufgerufen. Es erscheint dann eine confirm-Box. Bei einem Klick auf den OK-Button der confirm-Box wird (wegen return true ) das action-Ereignis vom form-Tag aufgerufen und in einer alert-Box das Wort 'ACTION' angezeigt.
Obwohl <input type="hidden" name="TEXT0" id="TEXT0" value="Text-Eingabe hidden" /> nicht sichtbar ist, liefern sowohl
window.document.getElementsByTagName('form')[0].getElementsByTagName('input')[5].value als auch
document.forms[0].elements['TEXT0']['value'] den String "Text-Eingabe hidden"
Das folgende Formular dient lediglich als Muster. Betrachtet weren die Zugriffe auf die Formularelemente und die submit-Ereignisbehandlung. Richtige Aussagen bitte ankreuzen.
<form action="javascript:alert('Jetzt action-Ausführung')"
    onsubmit="show(this.elements);return false;">
<fieldset><legend  name="LEGEND">Teste form-Events</legend>
<input type="text"     name="TEXT"  value="Eingabe-Text" />
<input type="checkbox" name="CHECKBOX" checked="checked" />

<input  type="submit"          value="/* 1 */" />
<button onclick="this.form.submit()"> /* 2 */ </button> 
<input  type="button"          value="/* 3 */"
        onclick="document.forms[0].submit()" />
</fieldset></form>
<script>
function show(arr) { 
  var i, el, nn, r = []; 
  function push(r, el, att) {
    if( el[att] ){ 
      r.push(el.nodeName.toLowerCase() + '.' + att +'='+ el[att]);
    }
  } 
  for (i = 0; i < arr.length; i += 1) { 
    el = arr[i]; r.push('---');
    push(r, el, 'type');  push(r, el, 'name');
    push(r, el, 'value'); push(r, el, 'checked');
  } window.alert(r.join('\n'));
}
</script>
Für das Formular liefert document.forms[0].elements.length die Zahl 6
Ein <fieldset disabled="disabled">...</fieldset> bewirkt, daß alle form.elemets innerhalb von fieldset deaktiviert werden
Ein Klick auf /* 1 */ zeigt eine Fehlermeldung an.
Ein Klick auf /* 2 */ zeigt in der ersten alert-Box
---
---
input.type=text
input.name=TEXT
input.value=Eingabe-Text
---
input.type=checkbox
input.name=CHECKBOX
input.value=on
input.checked=true
---
input.type=submit
input.value=/* 1 */
---
button.type=submit
---
input.type=button
input.value=/* 3 */
an und in einer weiteren alert-Box an: 'Jetzt action-Ausführung'
Ein Klick auf /* 3 */ zeigt an: 'Jetzt action-Ausführung'
Ein Formular hat 3 Buttons. Der angezeigte "Wert" als Teil des .innerHTML-Strings soll bei einem Botton-Klick um 1 erhöht werden. Die Callback-Funktion my_handler(event) wird mit form.addEventListener('click',my_handler,false) an das-"my_form"-Objekt gebunden. Ein Button-Klick-Ereigniss soll den Button-"Wert" erhöhen. Richtige Aussagen bitte ankreuzen.
<form id="my_form"> Bitte klicken:
  <button>Wert-a: 0</button> <!-- "Wert" ist 0 -->
  <button>Wert-b: 0</button> <!-- "Wert" ist 0 -->
  <button>Wert-c: 0</button> <!-- "Wert" ist 0 -->
</form>
<script>
function my_handler(event) { var tg, a, ev = event;
  ev = ev || window.event;
  tg = ev.target || ev.srcElement;
  if (tg.nodeName.toLowerCase() === 'form'){ 
    return;                           /* 1 */
  }
  a = tg.innerHTML.split(/\s*\:\s*/); /* 2 */
  a[1] = parseInt(a[1], 10) + 1;
  tg.innerHTML = a[0] + ": " + a[1];
  
  if (typeof ev.stopPropagation === "function") {
    ev.stopPropagation();            /* 3a */ // no bubble
  } ev.cancelBubble = true;

  if (typeof ev.preventDefault === "function") {
    ev.preventDefault();            /* 3b */   // prevent default action
  } ev.returnValue = false;
}

var form = document.getElementById('my_form');

if (document.addEventListener) {    /* 4a */  // W3C
  form.addEventListener('click', my_handler, false);
} else if (document.attachEvent) {  /* 4b */   // IE
  form.attachEvent('click', my_handler);
} else { form.onclick = my_handler; /*  */
}
</script>
Die Abfrage bei /* 1 */ ist notwendig, damit ein Klick auf das Formular (außerhalb der Button) keine Formular-Anteile gelöscht werden.
Bei /* 2 */ wird der "Wert" des geklickten Buttons um 1 erhöht.
Durch /* 3a */ wird 'no bubble' und durch /* 3b */ 'prevent default action' bewirkt.
Die Funktion .addEventListener entspricht der W3C-Empfehlung (siehe /* 4a */ ) und die Funktion .attachEvent wird für IE-Browser ( Vers. < 9) benötigt (siehe /* 4b */ ).
Die folgende Funktion add_handlers_to() erhält als Argument einen Array von Objekten. Jedes Objekt {el:target_obj, fn:my_func} braucht das gewünschte Target-Objekt (el:...) und die auszuführende onclick-Funktion (fn:...). Bitte anschauen und richtige Aussagen ankreuzen.
<form id="my_form"> Bitte klicken:
  <button>button-a: 0</button>
  <button>button-b: 0</button>
  <button>button-c: 0</button><br />
  <textarea cols="45" rows="5"></textarea>
</form>
<script>
var add_handlers_to = function (nodes) {    /* 1 */
  var i, el, ii = nodes.length; 
  for(i = 0; i < ii; i += 1) { ele = nodes[i].el;
    ele.style.cursor  = 'pointer';          /* 2 */
    ele.onclick = function (i) {            /* 3 */
      return function (event) { var ev = event; 
        if (!ev) { ev = window.event;}      /* 4 */
        var tg = ev.target || ev.srcElement;/* 5 */ 
        nodes[i].fn(tg);                    /* 6 */
        if (typeof ev.stopPropagation === "function") {
          ev.stopPropagation();             /* 7 */ 
        } ev.cancelBubble = true;
        if (typeof ev.preventDefault === "function") {
          ev.preventDefault();              /* 8 */  
        } ev.returnValue = false;
      };  // ende  return function (ev) ...
    }(i); // ende  onclick ...
  }       // ende  for(i = ...
};
                                            /* 9-a */
function bfn0 (tge){ 
  bfn1(tge); alert(tge.innerHTML); 
}
function bfn1 (tge) { 
  var a = tge.innerHTML.split(/\s*\:\s*/);  /* 9-b */
  a[1] = parseInt(a[1],10) + 1; 
  tge.innerHTML = a[0]+": "+a[1];
}
function bfn2 (tge){ bfn1(tge);             /* 9-c */
  var form = tge.parentNode,
  ta = form.getElementsByTagName('textarea')[0],
  els = form.elements, el, j, s='';

  for(j = 0; j < els.length; j += 1) { el = els[j];
    if(el.nodeName.toLowerCase() !== 'button'){continue;}
    s += '\nform button['+j+'].innerHTML=' + el.innerHTML;
  } ta.value = s;
}
var form = document.getElementById('my_form'), 
    ba = form.getElementsByTagName('button');

add_handlers_to(

{el:ba[0oO0,fn:bfn0}, {el:ba[1],fn:bfn1}, {el:ba[2],fn:bfn2}]
);</script>
Bei /* 1 */ entspricht nodes ein Array von Objekten.
Infolge /* 2 */ wechselt das DOM-Element (Tag) ele = nodes[i].el beim Überstreichen den Maus-Cursor.
Bei /* 3 */ wird dem DOM-Element el eine onclick-Closure-Funktion zugeordnet.
Bei /* 4 */ wird für MS-Browser das Event-Objekt ev gesetzt.
Infolge /* 5 */ wird bei einem späteren Klick tg zum Target-Objekt.
Bei /* 5 */ ist bei einem späteren Klick tg gleich this
Bei /* 5 */ ist bei einem späteren Klick tg gleich nodes[i].el
Bei /* 6 */ wird die von außen übergebene onclick-Callback-Funktion fn(tg) aufgerufen.
Bei /* 7 */ wird eine nachfolgende Event-Bubble-Phase abgebrochen.
Bei /* 8 */ wird die voreingestellte-Inner-Element-Ereignisfolge unterbunden (prevent default action).
Bei /* 9-0, 9-1, 9-2 */ werden die auszuführenden Event-Funktionen definiert.
Ein Klick auf button-a (siehe /* 9-a */) zeigt in einer alert-Box vom geklickten Element den .innerHTML-String an.
Ein Klick auf button-b (siehe /* 9-b */) erhöht infolge bfn1(tge) den im button-b angezeigten Wert um 1.
Ein Klick auf button-c (siehe /* 9-c */) erhöht infolge bfn1(tge) den im button-c den angezeigten Wert um 1 und zeigt in der Textarea die .innerHTML-Strings von button-a, button-b, button-c an.