No meu blazor server
aplicativo lateral, quero ouvir o mouseclick event
em uma página do Razor e, quando mouseclick
ocorrer (exceto em um botão), quero executar um método. Tentei seguir com JavaScript, mas não funcionou para mim:
no meu _host.cshtml adicionei o seguinte script:
window.addDocumentClickListener = () => {
document.addEventListener('click', function (e) {
if (e.target.tagName.toLowerCase() !== 'button') {
DotNet.invokeMethodAsync('MyProjectName', 'HandleMouseClick');
}
});
};
na minha página Razor:
@inject IJSRuntime JS
...
...
@code {
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender )
{
await JS.InvokeVoidAsync("addDocumentClickListener");
}
}
[JSInvokable]
public void HandleMouseClick()
{
Action_On_Mouseclick();
}
}
Aqui está uma demonstração sem JS extra, usando a página Counter. Ela tem uma página completa
div
com manipulador de eventos de clique. Observe que você precisa usarstopPropagation="true"
para evitar borbulhamento em botões e outros elementos de UI com eventos de UI.