Estoy trabajando en un editor personalizado (desplegable con elementos de búsqueda y búsqueda ajax basados en dicha búsqueda) y necesito mantener la celda en el modo de edición después del evento de blur .
A partir de Tabulator 5.1, el desenfoque debe manejarse llamando a cancel o success . Si eso no se cumple, Tabulator cancela la edición .
He comprobado cómo funciona el editor Autocompletar incorporado, pero la solución se encuentra en la search de tipo de entrada y aún se adhiere a esta restricción.
¿Cómo se puede lograr esto? Para mí, personalmente, tendría sentido si la función que implementa un editor personalizado tomara un paso de passtrough adicional cambiando la firma a (cell, onRendered, success, cancel, editorParams, passthrough) . Podríamos llamar a passthrough() dentro del evento de blur para indicar que estamos de acuerdo con exceder los límites de la celda activa y no queremos cancelar la edición.
He intentado
Tabulator ya tiene un editor de autocompletar incorporado que permite la búsqueda de texto y la búsqueda ajax.
Los detalles completos se pueden encontrar en la documentación del editor
Si desea crear un editor personalizado, le sugiero que su punto de partida sea mirar el código de los editores de selección y autocompletar existentes para ver cómo hacen esto, ya que ya funcionan correctamente, no hay necesidad de un argumento de paso adicional .
No ha habido cambios en el comportamiento del evento de desenfoque en los editores en ninguna de las versiones recientes de Tabulator, ni v5.0 ni v5.1
Verá que en las líneas 226 y 405 del editor de selección , utiliza un evento mousedown para rastrear cuando un usuario hace clic en elementos relacionados con el editor y establece una propiedad blurable en false , y luego vuelve a true unos ms más tarde:
listEl.addEventListener("mousedown", function(e){ blurable = false; setTimeout(function(){ blurable = true; }, 10); }); En la línea 559, escucha el evento de desenfoque en el editor, si el indicador de blurrable es false , es decir, alguien simplemente hace clic en un elemento del editor, ignora el evento de desenfoque y no cancela la edición.
input.addEventListener("blur", function(e){ if(blurable){ cancelItem(); } });