jQuery 我的 Blazor 应用无法正常工作
jQuery not working properly with my Blazor app
我有以下脚本,它在从我的浏览器启动的简单 html 文件中工作得很好:
$("*[scroll-to]").click((event) => {
// whatever here...
});
但是,当它与 Blazor 一起使用时,单击我的按钮时它不会被触发。
我找到了一个解决方法,将第一行替换为:
$(document).delegate("*[scroll-to]", "click", function (event) {
为什么我必须这样做?为什么它只会在使用 Blazor 时停止工作?
我还有很多其他功能不起作用,例如这个功能,它没有像应该的那样添加 display: none
css 属性:
if (!checkoutModal)
$("#checkoutModal").hide();
它基本上什么都不做,即使它正在执行。
jQuery 应正确导入:
我能做什么?为什么会发生这种情况,我该如何解决?
您想使用 JSInterop 来初始化 Blazor 应用程序中的 jQuery 个对象。定义应从 Blazor 调用以执行初始化的 JavaScript init 函数。这个函数通常应该只被调用一次。您应该从生命周期的 OnAfterRender(Async) 方法对中调用它。这些方法有一个名为 firstRender 的布尔参数,它在您的 Balzor 应用程序首次呈现时被评估为 true。请务必记住,只有在呈现 Blazor 应用程序后才初始化 JS 对象。
这是我的回答之一,详细解释了如何做到这一点
重要:
只有在你不能这样做的情况下才使用 JS。这是 Blazor,这不是 Angular 之类的。尝试将 JS 小部件(例如模态)转换为 Blazor 组件。
不要通过JS对象操作Blazor组件,例如jQuery,当然也不要通过JS对象改变组件的状态。它们不应干扰 Blazor 的渲染系统,也不应触及 Blazor 生成的 DOM 元素。在任何情况下,JS 对象所做的更改都将被忽略。例如,如果您要为绑定到 Blazor 中的 属性 的输入文本元素分配一个值,则在呈现页面时将忽略该值。
我有以下脚本,它在从我的浏览器启动的简单 html 文件中工作得很好:
$("*[scroll-to]").click((event) => {
// whatever here...
});
但是,当它与 Blazor 一起使用时,单击我的按钮时它不会被触发。
我找到了一个解决方法,将第一行替换为:
$(document).delegate("*[scroll-to]", "click", function (event) {
为什么我必须这样做?为什么它只会在使用 Blazor 时停止工作?
我还有很多其他功能不起作用,例如这个功能,它没有像应该的那样添加 display: none
css 属性:
if (!checkoutModal)
$("#checkoutModal").hide();
它基本上什么都不做,即使它正在执行。
jQuery 应正确导入:
我能做什么?为什么会发生这种情况,我该如何解决?
您想使用 JSInterop 来初始化 Blazor 应用程序中的 jQuery 个对象。定义应从 Blazor 调用以执行初始化的 JavaScript init 函数。这个函数通常应该只被调用一次。您应该从生命周期的 OnAfterRender(Async) 方法对中调用它。这些方法有一个名为 firstRender 的布尔参数,它在您的 Balzor 应用程序首次呈现时被评估为 true。请务必记住,只有在呈现 Blazor 应用程序后才初始化 JS 对象。
这是我的回答之一
重要: 只有在你不能这样做的情况下才使用 JS。这是 Blazor,这不是 Angular 之类的。尝试将 JS 小部件(例如模态)转换为 Blazor 组件。
不要通过JS对象操作Blazor组件,例如jQuery,当然也不要通过JS对象改变组件的状态。它们不应干扰 Blazor 的渲染系统,也不应触及 Blazor 生成的 DOM 元素。在任何情况下,JS 对象所做的更改都将被忽略。例如,如果您要为绑定到 Blazor 中的 属性 的输入文本元素分配一个值,则在呈现页面时将忽略该值。