eigenes Ereignis definieren

Parantatatam

mag Cookies & Kekse
Hallo Tutorianer,

ich habe folgendes Problem: jeder der mit Javascript schon einmal Eingabefelder daraufhin überwacht hat, ob sich der Wert geändert hat, wird wissen, dass das Ereignis change erst abgefeuert, wenn das Eingabefeld den Fokus verliert. Deshalb habe ich mir ein eigenes Ereignis namens instantechange definiert, das sich aus den Ereignissen focus, keydown, keyup und keypress zusammen setzt, was bei mir so aussieht:
Code:
window.addEventListener('DOMContentLoaded', function () {
  var event = document.createEvent('Event');
  event.initEvent('instantechange', true, true);
  a = document.getElementById('input');
  a.addEventListener('instantechange', function () {
    b = document.getElementById('output');
    b.innerText = this.value.length + ' Zeichen';
  }, false);
  a.addEventListener('keypress', function () {
    if(this.value !== this.prev_value) {
      this.dispatchEvent(event);
      this.prev_value = this.value;
    }
  }, false);
  a.addEventListener('keyup', function () {
    if(this.value !== this.prev_value) {
      this.dispatchEvent(event);
      this.prev_value = this.value;
    }
  }, false);
  a.addEventListener('keydown', function () {
    if(this.value !== this.prev_value) {
      this.dispatchEvent(event);
      this.prev_value = this.value;
    }
  }, false);
  a.addEventListener('focus', function () {
    this.prev_value = this.value;
  }, false);
}, false);
HTML:
<body>
  <input type="text" id="input" /><output id="output">0 Zeichen</output>
</body>
Wie man sehen kann, musste ich dafür fünf EventListener registrieren. Jetzt würde ich aber gerne beim Hinzufügen eines Ereignisses von mir nur den einen entsprechenden EventListener registrieren müssen. Hat dafür irgendjemand eine Idee, wie man das automatisieren kann?
 
Gratulation zur Erfindung des Rades :p
DOM/IE9:DOMAttrModified
MSIE: onpropertychange

Beide Events ermöglichen die Überwachung der Änderung von Eigenschaften von Elementen(z.B. des value in diesem speziellen Fall), und das unabhängig von Benutzeraktionen, auch bspw. skriptseitig vorgenommene Änderungen werden erfasst.

Bei dir fehlt noch die Überwachung von Cut & Paste, auch das ist für die Mitbewerber kein Problem :)
 
Zuletzt bearbeitet:
Ich danke dir für die Antwort. Jetzt würde mich aber trotzdem interessieren, wie das mit meinem Lösungsansatz funktioniert.
 
Ich mag kein jQuery, ich mag das in schönem reinen Javascript schreiben. Warum verschmäht ihr alle diese wunderbare Skriptsprache?
 
Ich danke dir vielmals dafür. Mein Denkfehler lag wohl darin, dass ich nicht daran gedacht habe, dass das Ereignis nur dann ausgeführt wird für ein Element, wenn für eben dies ein EventListener registriert wurde. Ansonsten hatte ich mir so etwas in die Richtung schon gedacht, aber eben nicht zu Ende gedacht. Deshalb danke ich euch vielmals.
 
Ich mag kein jQuery, ich mag das in schönem reinen Javascript schreiben. Warum verschmäht ihr alle diese wunderbare Skriptsprache?

Warum soll jemand diese Sprache verschmähen, jQuery ist auch reines Javascript, und verwendet die Sprache auf "schöne" Art in meinen Augen.

Es ist halt eine Frage der Produktivität. Es ist wenig rentabel sich tagelang in eine Fragestellung zu vertiefen, wenn die Lösung auf der Hand liegt. Es gibt auch andere "schöne" Sprachen, du fängst ja auch nicht an erstmal einen Webserver zu programmieren wenn du eine Website machen willst.

Nicht falsch verstehen, nichts spricht dagegen sich mit einer Thematik wie dieser zu beschäftigen um sie zu verstehen, aber nicht das Ziel aus den Augen verlieren, und das ist eine funktionierende Anwendung und nicht die tausendste Implementierung einer bereits zur Zufriedenheit gelösten Aufgabenstellung.

Mache lieber etwas Neues :)
 
Ich bastle doch gerade an etwas neuem, das es so anscheinend momentan noch nicht gibt, nur möchte ich dies eher als Leichtgewicht auf die Beine stellen und dafür nicht jQuery verwenden. Für viele Probleme braucht man einfach kein jQuery, weil das eher einen Schießen mit Kanonenkugeln auf Spatzen gleich kommt.
 

Neue Beiträge

Zurück