Ich schreibe ein benutzerdefiniertes <select>
Element mit nativen DOM (kein Polymer)Ein Klick Etikett nicht Fokussierung individuelles Elements (webcomponent)
Ich versuche, mein Element mit einem <label>
Elemente zu verwenden und lösen korrekt Ereignisse klicken, um meinen Element, wenn das Etikett angeklickt wird, das heißt:
<label>
My Select:
<my-select placeholder="Please select one">...</my-select>
</label>
// or
<label for='mySelect1'>My Select:</label>
<my-select id='mySelect1' placeholder="Please select one">...</my-select>
Allerdings tritt dieses Verhalten nicht aus dem Kasten heraus zu arbeiten, auch wenn ich einen tabindex fügen sie es machen fokussierbarem
Hier ist eine abgespeckte Version des Code und ein Spiel mit s ome grundlegende Debugging: https://jsfiddle.net/h56692ee/2/
var MySelectOptionProto = Object.create(HTMLElement.prototype);
document.registerElement('my-select-option', { prototype: MySelectOptionProto});
var MySelectProto = Object.create(HTMLElement.prototype);
MySelectProto.createdCallback = function() {
if (!this.getAttribute('tabindex')) {
this.setAttribute('tabindex', 0);
}
this.placeholder = document.createElement('span');
this.placeholder.className = 'my-select-placeholder';
this.appendChild(this.placeholder);
var selected = this.querySelector('my-select-option[selected]');
this.placeholder.textContent = selected ?
selected.textContent : (this.getAttribute('placeholder') || '');
};
document.registerElement('my-select', { prototype: MySelectProto});
Ich finde, mit dem 'is' Schlüsselwort ziemlich umständlich erweitern zu müssen, weil das bedeutet, dass einige meiner Elemente mit einer anderen HTML-Struktur geschrieben werden müssen. Ich habe mich dafür entschieden, ein select-Element zu umhüllen und es zur Bearbeitung des Fokus zu verwenden. Es wäre aber schön gewesen, die genannte ** Phrasing Content ** Schnittstelle direkt implementieren zu können. – Dogoku
Danke für die Punkte. Ich war wie du, dann erkannte ich, dass beide benutzerdefinierten Elemente (mit und ohne 'ist') für verschiedene Zwecke sind, so dass ich jetzt beide abhängig von meinen Bedürfnissen verwende. Aber der Standard ist noch nicht fertig, und vielleicht können Sie in Zukunft auch die integrierte Semantik mit autonomen benutzerdefinierten Elementen verwenden. Ich habe aktualisiert möglicherweise mit Links zu Erklärungen über die Unterschiede zwischen den beiden Syntax zu beantworten. – Supersharp