Quiero validar la entrada del usuario al presionar la tecla tabulador. Funciona bien. Pero cuando el usuario ingresó datos incorrectos, quiero obligarlos a actualizar. Lo que significa que quiero enfocarme en la celda que se acaba de editar.
Lo intenté
Pero nada funcionó.
¿Es posible simular presionar Shift + Tab a través de javascript?
Una pregunta más por qué
¿Cómo probar con jsFiddle ? Escriba, por ejemplo, 10+14 en la columna c1 y presione la tecla Tabulador. Recibe un mensaje de que los minutos "14" no están bien. Solo se permiten 0, 15, 30, 45.
table.on('cellEdited', (cell) => { var fieldName = cell.getField() var fieldValue = cell.getValue() var fieldLength = fieldValue.length var row = cell.getRow() var acceptedMinutes = [0, 15, 30, 45] switch (fieldName) { case "c1": fieldValue = fieldValue.replace(",", "").replace("+", "").replace(".", "").replace(" ", "") switch (fieldLength) { case 1: case 2: fieldValue = fieldValue + ":00" break case 3: case 4: var position = fieldLength - 2 fieldValue = fieldValue.substring(0, position) + ":" + fieldValue.substring(position); break } var tmpArray = fieldValue.split(":") if (tmpArray[1]) { if (!acceptedMinutes.includes(Number(tmpArray[1]))) { console.log("minutes NOT ok") cell.getElement().focus() //cell.getElement().click() } else { console.log("minutes ok") } } var hour = Number(tmpArray[0]) if (hour > -0 && hour < 24) { console.log("hours ok") } else { cell.getElement().click() cell.getElement().focus() console.log(cell.navigateLeft()) console.log(cell.navigatePrev()) console.log(cell.navigateRight()) console.log("hours NOT ok") } row.update({ "c1": fieldValue }) // row.update({fieldName: fieldValue}) break } })No puede focus() la cell porque el elemento de la cell es un div y no tiene el elemento de input representado en él. Puedes usar cell.edit() para enfocar el elemento de input , pero debido a que el elemento de input necesita tiempo para renderizarse , puedes envolver la llamada edit() dentro de setTimeout() . Entonces se vería así:
setTimeout(function() { cell.edit(); }, 100); Otra forma en la que puede investigar es personalizar sus propias combinaciones de teclas y deshabilitar la acción predeterminada para la tecla de tabulación. Luego, puede realizar su validación primero y luego usar navigateNext() o navigateRight() para pasar a la siguiente celda.