Cześć,
Piszę własny komponent dla pola z datą w Blazor. Założenie jest takie, że jeśli pole z datą jest aktywne to część daty, która jest aktywna zawsze powinna być zaznaczona (np. rok, miesiąc lub dzień - jak poniżej).

Jeśli wcisnę na klawiaturze strzałkę w górę lub w dół to chciałbym, aby data zmieniła się o 1 dzień, ale żeby zaznaczenie zostało.
Poniżej funkcja, która to robi:
private async Task OnKeyDownEvent(KeyboardEventArgs e)
{
preventDefault = true;
switch(e.Code)
{
case "ArrowUp":
{
if(CurrentValue != null)
{
CurrentValue = CurrentValue.Value.AddDays(1);
}
break;
}
case "ArrowDown":
{
if(CurrentValue != null)
{
CurrentValue = CurrentValue.Value.AddDays(-1);
}
break;
}
}
await JsRuntime.InvokeVoidAsync("SelectionPartOfText", ReferenceToInputDate, 0, 2);
await JsRuntime.InvokeVoidAsync("SelectionPartOfText", ReferenceToInputDate, 0, 2); //<- DLACZEGO TO MUSI BYĆ DRUGI RAZ ŻEBY ZADZIAŁAŁO ZAZNACZENIE??
}
Problem jest taki, że:
Jeśli wywołam funkcję SelectionPartOfText tylko raz to fragment daty się nie zaznacza!
Ale jak wywołam tą funkcję dwukrotnie, jedna po drugiej, to pole z datą się zaznacza...
Jeśli wywołam tą funkcję na początku funkcji OnKeyDownEvent a następnie na końcu funkcji jak poniżej to również pole będzie zaznaczone.
private async Task OnKeyDownEvent(KeyboardEventArgs e)
{
preventDefault = true;
await JsRuntime.InvokeVoidAsync("SelectionPartOfText", ReferenceToInputDate, 0, 2); //PIERWSZE WYWOŁANIE TEJ FUNKCJI (BEZ TEGO NIE ZADZIAŁA)
switch(e.Code)
{
case "ArrowUp":
{
if(CurrentValue != null)
{
CurrentValue = CurrentValue.Value.AddDays(1);
}
break;
}
case "ArrowDown":
{
if(CurrentValue != null)
{
CurrentValue = CurrentValue.Value.AddDays(-1);
}
break;
}
}
await JsRuntime.InvokeVoidAsync("SelectionPartOfText", ReferenceToInputDate, 0, 2); //<- DRUGIE WYWOŁANIE FUNKCJI (WYMAGANE DO PRAWIDŁOWEGO DZIAŁANIA - DLACZEGO?)
}
Czy może mi ktoś wyjaśnić dlaczego tak się dzieje? Dlaczego muszę dwa razy wywoływać tą samą funkcję JS?
Z góry bardzo dziękuję za pomoc!