Предотвратить вкладку, если пользовательская проверка не удалась
В редакторе пользовательских ячеек AG-Grid я добавил логику проверки, которая печатает сообщение об ошибке / успехе проверки, кроме ячейки, если значение неверное / правильное.
Но мне нужно запретить вкладку в случае сбоя проверки. в настоящее время происходит переход к следующей ячейке (поведение по умолчанию) и удаление неправильного значения до предыдущего значения / состояния.
Пример: пожалуйста, посмотрите небольшой макет кода:
https://plnkr.co/edit/UG14KMkqPrQKCtV6Qx6N?p=preview
ValidationCellEditor.prototype.init = function(params) {
this.isValid = true;
this.isValidating = false;
this.eGui = document.createElement('div');
this.eGui.innerHTML = `
<input value=${params.value} />
<span class="validating-msg hide">Validating...</span>
<span class="validating-result hide"><span>
`;
this.eInput = this.eGui.querySelector('input');
this.eValidating = this.eGui.querySelector('.validating-msg');
this.eResult = this.eGui.querySelector('.validating-result');
this.eInput.addEventListener('input', this.inputChanged.bind(this));
}
ValidationCellEditor.prototype.inputChanged = function(event) {
this.showValidatingMessage(true);
this.isValidating = true;
this.eResult.classList.add('hide');
this.validate(event.target.value).then(valid => {
this.isValid = valid;
this.isValidating = false;
this.showValidatingMessage(false);
this.showValidationResult(valid);
});
}
ValidationCellEditor.prototype.validate = async function(value) {
return await new Promise(resolve => {
setTimeout(() => {
resolve(value.length > 0);
}, 200);
});
}
В приведенном выше коде проверки для 1-го столбца, если значение пустое, то логика выводит "НЕПРАВИЛЬНОЕ ЗНАЧЕНИЕ" в элементе span редактора, но я не могу предотвратить вывод, я пробовал event.preventDefault() и event.stopImmediatePropogation() везде, где я считаю возможным, но бесполезно
Один из способов предотвращения выхода из табуляции - это вызвать событие grid tabToNextCell и снова вызвать логику валидации, а в случае, если валидация завершится неудачно, вернуть предыдущий индекс строки и столбец, так что сетка не будет перемещать фокус на следующую ячейку, но это имеет свои недостатки как фокус удаляется из редактора ячеек (DIV внутри ячейки) и перемещается в ячейку, а также удаляет сообщение об ошибке, так как кажется, что редактор ячеек разрушен.