Chciałbym zrobić interaktywny input, który po wprowadzeniu @ + litera pokaże listę obecnych osób, a po kliknięciu uzupełni input o daną wartość patrz zdj. poniżej .
Z samym pokazaniem osób nie mam problemu. Do tego wykorzystuję wyrażenie regularne 'RegEx', a samą listę osób pobieram z tablicy.
Problem pojawia się przy wyborze danej osoby z listy. Gdy uruchamiam funkcję poprzez kliknięcie to raz, że funkcja zaczyna działanie dopiero po dwukrotnym jej wymuszeniu, a dwa to zamiana czy też uzupełnienie brakującej nazwy po kliknięciu w daną osobę.
// co do tego kodu nie jestem pewien czy on działa zgodnie z konspektem
$(document).on("click", ".find_user div", ()=>{
let c = $(".find_user div");
for(let i = 0; i< c.length; i++){
$(".find_user div#found-"+(i+1)).click(()=>{
//hide
$("#chat_text").val($("#chat_text").val() + $(".find_user div#found-"+(i+1)).text())
})
}
})
Uzupełniając: Gdy mam wpisane w input @gre to w sytuacji kiedy kliknę w greg z listy nie wiem zbytnio jak zamienić dane słowo w inpucie o pełną nazwę.
Trzy: To sytuacja kiedy mam @gre w środku lub na końcu zdania. Gdyby było inaczej to w dużym skrócie zrobiłbym coś w stylu poniższego kodu:
$("#text").val($("#text").val() + "@" + selected_from_list)
RegEx code:
var patients = [
"Greg",
"Grey",
"Anna"
];
function xa(input){
var re = new RegExp(input+'.+$', 'i');
let patient = patients.filter(function(e, i, a){
return e.search(re) != -1;
});
return patient;
}
Pytanie dodatkowe: Na wyżej opublikowanym screenshot'cie jest zwyczajny input [text]. W przyszłości chcę wykorzystać contenteditable div, ale nie mogę znaleźć rozwiązania, aby wyłączyć rozciąganie go po naduszeniu przycisku ENTER. Jeśli ktoś ma wiedzę jak zrobić aby div zachowywał się jak zwyczajny input to byłbym wdzięczny