BotBeta
Admin
Sigma
Verificado
Verificación en dos pasos activada
¡Usuario popular!
Suscripción a IA
Si sigues teniendo problemas y los cambios en uno de los textareas están afectando a otros de diferentes formularios, es posible que el manejo de las selecciones de elementos no esté funcionándose como se esperaba. Vamos a hacer algunas modificaciones más para asegurarnos de que todo esté debidamente aislado dentro de cada formulario.sigue igual
### Modificación del Código
Asegurémonos de que cada formulario esté actuando independientemente. Reemplacemos algunas selecciones con referencias únicas y aplicaremos la lógica correctamente:
JavaScript:
$(document).ready(function(){
// Usar delegación de eventos para el evento 'input'
$(document).on('input', '.sendms', function(){
var inputValue = $(this).val();
var dataid = $(this).attr('dataid');
var $currentForm = $(this).closest('form'); // Obtiene el formulario actual
$currentForm.find(".intercomu").remove(); // Elimina sugerencias anteriores
var matches = inputValue.match(/@(\w+)/g);
if (matches) {
var lastMention = matches[matches.length - 1];
var lastMentionIndex = inputValue.lastIndexOf(lastMention);
if (lastMentionIndex + lastMention.length < inputValue.length && !inputValue[lastMentionIndex + lastMention.length].trim()) {
return; // Sale si hay caracteres después de la última mención
}
$.get("../hola.php", {
searpro: lastMention,
prosear: matches
}, function(data){
const modifiedData = data.replace(/<cite class="lobre" /g, '<cite class="lobre" datainput="' + dataid + '" ');
$('<div class="intercomu cls' + dataid + '">Estás buscando ' + lastMention + ' ' + modifiedData + '</div>').appendTo($currentForm); // Inserta dentro del formulario actual
});
}
});
// Manejar el click en .lobre elementos
$(document).on("click", ".lobre", function(){
var dataidValue = $(this).attr("datauser");
var dataidInput = $(this).attr("datainput");
var $currentInput = $(this).closest('.intercomu').find('.sendms[dataid="' + dataidInput + '"]'); // Asegúrate de seleccionar el input correspondiente del mismo formulario
// Actualiza el valor del textarea
$currentInput.val(function(i, text) {
var mentionIndex = text.lastIndexOf('@');
$currentInput.closest('form').find(".intercomu").remove(); // Elimina sugerencias del mismo formulario
return (mentionIndex !== -1) ? text.substring(0, mentionIndex) + "@" + dataidValue + " " : "@" + dataidValue + " ";
}).focus(); // Enfoca el textarea
});
// Manejar el evento blur para eliminar sugerencias
$(document).on('blur', '.sendms', function() {
var $currentForm = $(this).closest('form'); // Asegúrate de trabajar solo dentro del formulario actual
setTimeout(function() {
$currentForm.find(".intercomu").remove(); // Elimina sugerencias solo del formulario actual
}, 400);
});
});
### Cambios Clave
1. Uso de
appendTo($currentForm): - Las sugerencias se insertan directamente dentro del formulario actual, asegurando que no interfieran con otros formularios.
2. Selección de Input:
- En el evento click de
.lobre, se asegura que siempre busquemos el input relacionado que está en el mismo formulario.3. Aislamiento Total:
- Cada acción de eliminación de sugerencias y manipulación del textarea está destinada a solo afectar el formulario actual.
### Verifica el Estructura HTML
Asegúrate de que la estructura HTML de tus formularios sea algo como esto:
HTML:
<form>
<textarea class="sendms" dataid="1"></textarea>
<div class="intercomu"></div>
</form>
<form>
<textarea class="sendms" dataid="2"></textarea>
<div class="intercomu"></div>
</form>
### Probar el Comportamiento
Si aún experimentas problemas, asegúrate de verificar:
- Que cada formulario tiene su propia referencia única (por ejemplo, usando atributos como
dataid) y que no hay interacciones no deseadas. - La respuesta desde
hola.phpestá formateada de acuerdo a tus necesidades y no está causando problemas visuales.
Si aún así no funciona, considerar depurar el flujo del código para ver en qué punto las referencias a otros formularios están interfiriendo.

