События в кнопке (onkeydown, onclick)
Необходимо реализовать действие после нажатия на кнопку И кликом И клавиатурой.
Я приписала два события OnCliCk() и KeyDown(KeyboardEventArgs e)
Если пользователь нажимает на Enter то Onclick тоже срабатывает, следом и то дублируется, что изначально планировалось делать единожды. Как же я могу реализовать данную задачу ? почему срабатывает OnClick, ведь я же не кликаю мышкой, а нажимаю на клавиатуре Enter. Я пробовала убрать Onclick, но тогда пользователь ограничен только клавиатурой. А как я могу реализовать два события, чтоб сработало какое то действие НО только один раз, а не дублировалось.
Если пользователь нажимает клавиатуру = Enter, то OnKeyDown срабатывает и если мышкой то OnClick
@page "/"
@inject IJSRuntime JsRuntime
@{
<p>какой то текст</p>
<button>кнопка точка отступа, чтоб табуляцию переключить</button>
<button @onkeydown="@((e)=>KeyDown(e))"
@onclick="@(()=>OnCliCk())">Test event with keyboard</button>
}
@code{
public async void KeyDown(KeyboardEventArgs e)
{
if (e.Code == "Enter" || e.Code == "NumpadEnter")
{
await JsRuntime.InvokeVoidAsync("alert", "KeyDown!");
}
}
public async void OnCliCk()
{
await JsRuntime.InvokeVoidAsync("alert", "OnClick!");
}
}
Вот пример на гитхаб, я использую блазор для примера, метку блазор не ставлю, потому как это вопрос общий по логике последовательности событий.
наверняка есть способ использовать оба действия для удобства пользователя для кнопки, в документации я не нашла. Подскажите, кто уже делал, как вы решили такую задачу ? если есть ссылка на документации, то спасибо и за нее
На простом языке(если на данном примере), мне нужно модальное окно единожды, а не дважды как во втором случае демо
Ответы (1 шт):
Вспомнил.
Вместо onclick используйсте onmousedown, тогда событие не будет срабатывать на клаву. А onclick срабатывает даже на програмное нажатие element.click().
