Dies ist ein Problem, das ich mit oninput
und onchange
auch habe.Wie überschreibe ich onclick-Ereignis für ein benutzerdefiniertes html-Element, so dass es nur löst, wenn ich es frage?
Im folgenden Beispiel möchte ich das Onclick des benutzerdefinierten Elements nur aktivieren können, wenn auf die interne Schaltfläche geklickt wird.
https://jsfiddle.net/xk5w95gf/
class TestElm extends HTMLElement {
constructor() {
super();
this._value = null
this._box
this._button
}
connectedCallback(){
this._box = document.createElement("div")
this._button = document.createElement("button")
this._box.style.height = "200px"
this._box.style.background = "green"
this._button.innerHTML = "Only clicking this should trigger the outside onclick"
this.appendChild(this._box)
this._box.appendChild(this._button)
this._button.onclick =() => this.dispatchEvent(new MouseEvent("click", {
bubbles: true,
cancelable: true
}))
}
}
customElements.define('test-elm', TestElm);
Gerade jetzt, die Onclick Feuer für jede Onclick, mit Klick auf den Button zweimal
<test-elm id="myelm" onclick="console.log('clicked button')"></test-elm>
Während dies dies funktionieren wird geht auch gegen die übliche Weise Ereignisse Blase. Solange es Ihnen nichts ausmacht, sollte Ihre Lösung gut funktionieren. Aber mit einer Web-Komponente können Sie das 'click'-Ereignis erfassen und immer zulassen. Wenn der Klick auf der Schaltfläche erfolgt, senden Sie ein zusätzliches Ereignis, um die Außenwelt über diese bestimmte Aktion zu informieren. – Intervalia