【发布时间】:2020-08-26 11:38:53
【问题描述】:
在 Vaadin 14.3.2 应用程序中,我创建了自己的数字字段来格式化(数字)输入。
因此我创建了一个这样的类:
@Tag("my-number-field")
@JsModule("./js/my-number-field.js")
public class MyNumberField extends TextField {
[...]
}
和 my-number-field.js 中的一些 JavaScript(见下文)进行格式化。 这种格式适用于 Chromium、Chrome、Edge、Firefox 以及 Safari 13.1.3。
但是在 Safari 中,发生这种情况时不会在服务器端触发 ValueChangeListener:
inputElement.value = [newValue];
这是我的代码的一些最小的 sn-p,仍然显示行为:
(function() {
customElements.whenDefined('vaadin-text-field').then(() => {
class MyNumberField extends customElements.get('vaadin-text-field') {
constructor() {
super();
}
static get is() {
return 'my-number-field';
}
ready() {
super.ready();
this.addEventListener('input', this.formatInput, true);
}
formatInput (event) {
const inputElement = this.inputElement;
const originalInputValue = inputElement.value;
// this is the re-formatting
inputElement.value=originalInputValue+'0';
};
}
customElements.define(MyNumberField.is, MyNumberField);
});
})();
当我注释 inputElement.value = [newValue]; 行时,服务器端的 ValueChangeListener 会获取输入的值。激活该行后,ValueChangeListener 不会获得输入/新格式化的值。
是否有在 Safari 中触发 ValueChangeListener 的技巧?
【问题讨论】:
标签: javascript vaadin-flow vaadin10