input: fix textarea ref (#13803)

pull/14158/head
Zhi Cun 2019-01-21 14:42:00 +08:00 committed by Jiewei Qian
parent e9aae8f706
commit c154292d1b
2 changed files with 20 additions and 7 deletions

View File

@ -149,7 +149,10 @@
},
watch: {
suggestionVisible(val) {
this.broadcast('ElAutocompleteSuggestions', 'visible', [val, this.$refs.input.$refs.input.offsetWidth]);
let $input = this.getInput();
if ($input) {
this.broadcast('ElAutocompleteSuggestions', 'visible', [val, $input.offsetWidth]);
}
}
},
methods: {
@ -248,7 +251,11 @@
suggestion.scrollTop -= highlightItem.scrollHeight;
}
this.highlightedIndex = index;
this.$el.querySelector('.el-input__inner').setAttribute('aria-activedescendant', `${this.id}-item-${this.highlightedIndex}`);
let $input = this.getInput();
$input.setAttribute('aria-activedescendant', `${this.id}-item-${this.highlightedIndex}`);
},
getInput() {
return this.$refs.input.getInput();
}
},
mounted() {
@ -256,7 +263,7 @@
this.$on('item-click', item => {
this.select(item);
});
let $input = this.$el.querySelector('.el-input__inner');
let $input = this.getInput();
$input.setAttribute('role', 'textbox');
$input.setAttribute('aria-autocomplete', 'list');
$input.setAttribute('aria-controls', 'id');

View File

@ -221,10 +221,10 @@
methods: {
focus() {
(this.$refs.input || this.$refs.textarea).focus();
this.getInput().focus();
},
blur() {
(this.$refs.input || this.$refs.textarea).blur();
this.getInput().blur();
},
getMigratingConfig() {
return {
@ -245,7 +245,7 @@
}
},
select() {
(this.$refs.input || this.$refs.textarea).select();
this.getInput().select();
},
resizeTextarea() {
if (this.$isServer) return;
@ -286,7 +286,10 @@
// set input's value, in case parent refuses the change
// see: https://github.com/ElemeFE/element/issues/12850
this.$nextTick(() => { this.$refs.input.value = this.value; });
this.$nextTick(() => {
let input = this.getInput();
input.value = this.value;
});
},
handleChange(event) {
this.$emit('change', event.target.value);
@ -322,6 +325,9 @@
this.$emit('input', '');
this.$emit('change', '');
this.$emit('clear');
},
getInput() {
return this.$refs.input || this.$refs.textarea;
}
},