B
blankito1998
Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
$(document).ready(function(){Lamento la confusión anterior. Vamos a corregir la lógica y asegurarnos de que el intercomu se muestre correctamente solo cuando hay una coincidencia válida y que se elimine adecuadamente en otros casos.
### Código Corregido
Aquí tienes el código actualizado:
Insertar CODE, HTML o PHP:<?php echo '<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <style> .intercomu { box-shadow: 0px 0px 3px #000; background: #ddd; padding: 7px; width: 200px; float: left; } </style> </head> <body> <textarea class="nawere" dataid="1"></textarea> '; ?> <script> $(document).ready(function () { var timeout; $(".nawere").on("input", function () { clearTimeout(timeout); var inputValue = $(this).val(); // Verificar si el input está vacío o solo tiene espacios if (inputValue.trim() === "") { $(this).next(".intercomu").remove(); return; } // Verificar el último carácter para eliminar el intercomu si es un espacio if (inputValue.endsWith(" ")) { $(this).next(".intercomu").remove(); // Eliminar el intercomu y detener las búsquedas return; } // Buscar coincidencias de "@" seguido de caracteres alfanuméricos var matches = inputValue.match(/@\w+/g); // Si hay coincidencias y el último carácter después del @ es un espacio if (matches && matches.length > 0) { timeout = setTimeout(() => { $(this).next(".intercomu").remove(); // Eliminar el intercomu existente // Realizar el AJAX para buscar datos $.get("../hola.php", { searpro: matches[matches.length - 1] }, function (data) { $("<span class=\'intercomu\'>Estás buscando " + matches[matches.length - 1] + ": " + data + "</span>") .insertAfter($(".nawere")); // Inserta después del input actual }); }, 300); // Ajusta el tiempo según sea necesario } else { $(this).next(".intercomu").remove(); // Eliminar el intercomu si no hay coincidencias } }); // Cuando el input pierde el foco, se elimina el intercomu $(".nawere").on("blur", function () { $(this).next(".intercomu").remove(); }); }); </script> <?php echo ' </body> </html>'; ?>
### Explicación de la Lógica:
1. Verificación del Espacio: Si el input está vacío o termina con un espacio, el intercomu se elimina.
2. Coincidencias: Se busca el patrón@seguido de caracteres alfanuméricos. Si hay coincidencias, se prepara para realizar la búsqueda en el servidor.
3. Eliminación Inmediata: Si no hay coincidencias, eliminamos el intercomu inmediatamente.
### Comportamiento Esperado:
- Intercomu Visible: Cuando entras un texto válido comenzando con
@.- Eliminación del Intercomu: Si hay un espacio o texto adicional que no sigue el formato correcto.
Prueba este código y verifica si ahora el intercomu se comporta de manera adecuada. Si sigues teniendo problemas, házmelo saber y revisaré más a fondo. ¡Gracias por tu paciencia!
$('.nawere').on('input', function() {
var inputValue = $(this).val();
var dataid = $(this).attr('dataid');
if(inputValue.endsWith('@') || inputValue.endsWith(' ')) {
$(".intercomu").remove();
return; // retorna aquí para no agregar un nuevo intercomu
}
var matches = inputValue.match(/@\w+/g);
if(matches) {
$(".intercomu").remove();
$('<a class="intercomu cls'+dataid+'">estas buscando '+matches[matches.length - 1]+'</a>').insertAfter($(this));
}
});
});
empecemos de 0, haz que cuando deje un espacio en blanco deje de buscar y cuando escriba cualquier otra letra no busque mas hasta que escriba la proxima @

