Cześć,
piszę sobie własny component w blazor, który dziedziczy po klasie InputBase i zawiera html-owy <input>
w którym umieściłem następujące atrybuty:
@oninput="@(async e => await OnInput(e))"
@onkeyup="@(async e => await OnKeyUp(e))"
@onkeydown="@(async e => await OnKeyDown(e))"
@onkeypress="@(async e => await OnKeyPress(e))"
@onkeydown:preventDefault=_prevent_onkeydown
@onkeypress:preventDefault=_prevent_onkeypress
@oninput:preventDefault=_prevent_oninput
@onkeyup:preventDefault=_prevent_onkeyup
W funkcji OnKeyDown mam warunek typu:
if(!Regex.IsMatch(e.Key, "[0-9]"))
{
_prevent_onkeydown = true;
_prevent_onkeypress = true;
_prevent_oninput = true;
_prevent_onkeyup = true;
}
Czyli jeśli wprowadzany znak jest inny niż 0-9 to powinno blokować domyślne zachowanie inputa.
Problem jest taki, że to nie działa dla wciśniętych klawiszy m.in. delete i backspace. Tzn. warunek jest spełniony i zmienne _prevent_onkeydown
przyjmują wartość true, ale delete oraz backspace kasują zawartość pola input - a ja potrzebuję w pewnych sytuacjach zablokować taką możliwość.
Czy może mi ktoś wyjaśnić dlaczego to nie działa lub jak zablokować kasowanie znaków przez delete / backspace?
Obecnie ominąłem problem i w funkcji OnInput przywracam poprzednią wartość inputa, ale to takie bardziej obejście i wolałbym to inaczej rozwiązać.