Dobra, rozwiązanie było wiele prostsze, wystarczyło dodać setTimeout() z jakąś niezauważalną dla okoa wartością, żeby js poczekał z odczytem wartości.
Jeśli ktoś trafi na temat zostawiam rozwiązanie - funkcja podpowiadająca ile użytkownikowi zostało liter do wpisania.
this.charsLeft = function (classOrIDTextElement, classOrIDContainerForNumber, maxLength, message = ': letters left', messageForOne = ': letter left') {
setTimeout(function () {
let strLength = $(classOrIDTextElement).val().length;
if (strLength <= (maxLength - 2)) {
$(classOrIDContainerForNumber).html(maxLength - strLength + message);
} else if (strLength === (maxLength - 1)) {
$(classOrIDContainerForNumber).html(maxLength - strLength + messageForOne);
} else {
$(classOrIDContainerForNumber).html(strLength - strLength + messageForOne);
}
}, 100);
$(classOrIDTextElement).on('keydown', function (e) {
setTimeout(function () {
let strLength = $(classOrIDTextElement).val().length;
let charsLeft = maxLength - strLength;
if (e.keyCode === 8) {
if (strLength === -1) {
//do nothing
} else {
if (strLength <= (maxLength - 2)) {
$(classOrIDContainerForNumber).html(charsLeft++ + message);
} else if (strLength === (maxLength - 1)) {
$(classOrIDContainerForNumber).html(charsLeft++ + messageForOne);
} else {
$(classOrIDContainerForNumber).html(charsLeft++ + messageForOne);
}
}
}
}, 100);
});
};