... да, я знаю ... Blazor Server обслуживается на стороне, и я могу обрабатывать события DOM с помощью моего C# кода на стороне сервера ... все же имеет смысл добавить событие javascript на чистой стороне клиента обработчик и, что удивительно, кажется, что это невозможно, потому что _framework / blazor.server. js проглатывает их ...
Вот самые простые изолированные шаги для воспроизведения того, что я делаю.
- Создайте приложение Blazor, используя шаблон VS 2019, выберите приложение сервера Blazor на следующем шаге.
В Index.razor добавьте строку в любом месте <div id="test">Hello, click me!</div>
В _Host.cs html добавьте следующий скрипт после или до уже существующей строки <script src="_framework/blazor.server.js"></script>
:
... потянув меня за волосы, я не могу вставить код блок, см. после шага 4 ...
Запустите приложение и нажмите F12, чтобы увидеть вывод консоли.
здесь это сценарий на шаге 3:
<script>
console.log("script is executing...");
console.log("element found, its innerText is: " + document.getElementById("test").innerText);
document.getElementById("test").addEventListener("click",
function() {
console.log("click handler called");
});
</script>
Вопрос
Я что-то упустил? Можно ли заставить эту работу работать без сервера? Если это невозможно, то многие из существующих javascript виджетов и jQuery плагинов как будут их инициализировать?
Что я пробовал до сих пор?
- Используйте другое событие, например
mouseup
: не работает. - Измените порядок моего пользовательского сценария и
<script src="_framework/blazor.server.js"></script>
: ни один из них не работает ... - Закомментируйте строку
<script src="_framework/blazor.server.js"></script>
для диагностики c причины: обработчик событий теперь вызывается, и я вижу вывод консоли в браузере: "обработчик щелчка" с именем "
Чтобы заранее ответить «почему я хотел бы сделать это?»:
Я хотел бы, например, реализовать поведение DOM, при котором нажатие на элемент изменяет его атрибуты. Я знаю, я могу прикрепить обработчик C#, а затем вызвать функцию возврата javascript, но мне бы не хотелось этого туда и обратно. Кроме того, возможно, существует множество javascript плагинов и lib, которые полагаются на то, что его скрипт инициализации присоединяет обработчик событий к DOM.