2016-10-29 6 views
1

Ich möchte in allen Eingängen mit benutzerdefinierten Setter für alle Änderungen von value Eigenschaft abonnieren:Setter für HTMLInputElement.value

Object.defineProperty(HTMLInputElement.prototype, 'value', { 
    set: function(newValue) { 
     // do some logic here 

     // WHAT PUT HERE to call "super setter"? 
    } 
}); 

Wenn ich this.value = newValue; verwende ich bin Maximum call stack size exceeded immer was ganz richtig ist, aber ...

Vergesst nicht. Was soll ich anrufen, um value richtig zu ändern? Hier ist JSFIDDLE mit detaillierter Erklärung.

Antwort

0

Sie können nicht, für ein paar Gründe:

  1. -Host bereitgestellte Objekte müssen nicht Eigentum Neudefinition ermöglichen. Wenn es in einem Browser funktioniert, funktioniert es möglicherweise nicht auf einem anderen.

  2. HTMLInputElement macht keine Möglichkeit, den aktuellen Wert andere als die value Eigenschaft zuzugreifen. Zum Beispiel gibt es kein entsprechendes Attribut, mit dem Sie einen Endlauf um die value-Eigenschaft ausführen können (das value-Attribut ist der Standard Wert, nicht der aktuelle Wert eines Eingangs).

+0

So wie zu sehen, wenn 'Wert' Eigenschaft ändert? In der Zwischenzeit habe ich es mit 'MutationObserver' versucht, aber ohne Ergebnis. –

+0

@RemekAmbroziak: Der einzige Weg, um es zu tun, ist die Umfrage. Es wird kein Ereignis ausgelöst und keine DOM-Mutation vorgenommen, wenn sich 'Wert' aufgrund des ihm zuzuweisenden * Codes * ändert (anstelle einer Benutzeraktion). –

Verwandte Themen