【问题标题】:Is there an "internal link click" handling logic in Blazor that calls preventDefault when it recognizes clicks on internal links?Blazor 中是否有“内部链接点击”处理逻辑在识别内部链接点击时调用 preventDefault?
【发布时间】:2019-04-27 11:50:27
【问题描述】:

假设我的组件中有这个元素:

<a href="#" class="btn btn-primary" onclick="@IncrementCount">Click me</a>

当您单击链接时,它不会增加计数器,而是跳转到“#”url,导航到主页(Blazor 默认行为)。然而,我的预期行为是计数器会增加。

注意:我不问如何防止默认动作;我更想知道“内部链接点击”处理逻辑是否确实存在,正如史蒂夫·桑德森所说:https://github.com/aspnet/Blazor/pull/937 如果有,请您提供它的位置。

据我所知,在 Blazor 中,唯一被阻止的默认操作是提交表单(传统帖子),但我可能会被证明是错误的......

【问题讨论】:

    标签: blazor


    【解决方案1】:

    Blazor 确实会在锚标记 onclick 事件上调用 prevent default,但是,仅当位置位于基本标记 URI 空间内时。

    具体的代码可以查看here

    在您提供的代码示例中,我建议您使用按钮,这样您就不必担心导航事件。 Anchor 元素应该只用于导航,而不是专门用于执行一般操作,因为它避免了您发现的事件问题。

    希望这会有所帮助。

    【讨论】:

    • 说我是对的,你的意思是史蒂夫安德森在这里所说的不是真的?因为这是我的问题,不是如何解决这个问题,而是 Blazor 中是否有一个“内部链接点击”处理逻辑,当它识别内部链接的点击时调用 preventDefault,正如史蒂夫安德森在 github 问题中所说。见上面的链接。我可以通过阅读代码来验证它,但是没有时间,我想我可以在这里得到答案。在我看来,不存在这样的逻辑,因为我知道唯一阻止的默认操作是表单提交。但我想确定一下...谢谢...
    • 我已经更新了我的答案,我有机会检查了一些代码,但我最初的答案是错误的。希望这是您正在寻找的答案。
    • 感谢您的回复,@Chris Sainty。我非常熟悉这段代码,它的作用是防止锚元素的默认操作,从而启用内部导航。这绝对不能为我提供一种方法来阻止锚元素的默认操作,并在单击事件处理程序 IncrementCount 中执行代码(请参阅我的问题)。我可以使用 JSInterop 或等待 3.0.0-preview6。看到这个:github.com/aspnet/AspNetCore/issues/5545
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 2014-04-18
    • 2014-02-25
    • 1970-01-01
    • 2019-05-09
    相关资源
    最近更新 更多