如果 ASP.NET 中的 href 为空,则禁用锚标记

发布于 2024-10-20 01:40:19 字数 1330 浏览 2 评论 0原文

我有一个 ASP.NET 菜单,它在渲染时生成许多锚标记。
我的要求是

  1. 防止回发如果 href 或 锚标记是“”或“#”。
  2. 使光标不显示 首先

,我检查了生成的锚标记之一的标记,

    <a href="#" 
        class="popout level1 static" 
        tabindex="-1"  
        onclick="__doPostBack('ctl00$NavigationMenu','Unternehmen')">
        Company
    </a>

我看到了一个已经绑定的点击事件,并编写了一个快速的 jquery 片段。

    $(document).ready(function () {
        $(".menu a").each(function () {
            var anchor = $(this);
            var url = (anchor.attr('href').length == 0) ? "" : anchor.attr('href').trim();
            if (url == "" || url == "#") {
                //unbind the __dopostback
                anchor.unbind('click');
                anchor.bind('click',function (e) {
                    e.preventDefault();
                });
                anchor.css("cursor", "default");
            }
        });
    });

当我将鼠标悬停在空链接上时,光标显示默认链接而不是手形,这意味着我的锚点已被识别。但是当我点击锚点时,发生了回发!

尝试将 anchor.unbind('click'); 替换为 anchor.kill('click');
尝试通过附加 e.stopPropogation 替换 e.preventDefault();,甚至 return false;
尝试用 anchor.click(function(e) { 替换 anchor.bind('click', function(e){)

似乎没有效果。我的可能有什么问题代码?

I have an ASP.NET Menu which generates many anchor tags when rendered.
My requirements were

  1. to prevent postback if href or an
    anchor tag is "" or "#".
  2. to make the cursor not to show the
    hand

First I checked the markup of one of the generated anchor tags

    <a href="#" 
        class="popout level1 static" 
        tabindex="-1"  
        onclick="__doPostBack('ctl00$NavigationMenu','Unternehmen')">
        Company
    </a>

I saw an already bound click event and wrote a quick jquery snippet.

    $(document).ready(function () {
        $(".menu a").each(function () {
            var anchor = $(this);
            var url = (anchor.attr('href').length == 0) ? "" : anchor.attr('href').trim();
            if (url == "" || url == "#") {
                //unbind the __dopostback
                anchor.unbind('click');
                anchor.bind('click',function (e) {
                    e.preventDefault();
                });
                anchor.css("cursor", "default");
            }
        });
    });

When I hovered on the empty link, the cursor is showing the default one instead of hand, that means my anchor is recognized. But when I clicked the anchor, postback occurred!

Tried replacing anchor.unbind('click'); with anchor.kill('click');
Tried replacing e.preventDefault(); by appending e.stopPropogation and even return false;
Tried replacing anchor.bind('click', function(e){ with anchor.click(function(e) {

Nothing seems to work. What could be wrong with my code?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

伴我心暖 2024-10-27 01:40:19

尝试在代码中使用 anchor.removeAttr("onclick");

try using anchor.removeAttr("onclick"); in your code

毁我热情 2024-10-27 01:40:19

为什么不使用这行简单的代码而不是删除事件处理程序呢?

实际上我想在页面查看模式下禁用我的链接。
这对我有用。

在代码隐藏中:

href.Attributes.Clear();
href.Disabled = true;

在源代码中:

<a href="#" id="href" runat="server" onclick="Showpopup();" style="azimuth:left;" >Create New</a>

Instead of removing eventhandler why not use this simple lines of code.

Actually I want to disable my link in view mode of page.
It worked for me.

In Code-behind:

href.Attributes.Clear();
href.Disabled = true;

In source-code:

<a href="#" id="href" runat="server" onclick="Showpopup();" style="azimuth:left;" >Create New</a>
逆蝶 2024-10-27 01:40:19

与其删除事件处理程序,为什么不显式地将其替换为以下内容:

anchor.click(function() { return false; });

Instead of removing the event handler, why not explicitly replace it with something along the lines of:

anchor.click(function() { return false; });
2024-10-27 01:40:19

如何使用空 href 或仅使用“#”href 循环遍历锚点。

$(".menu a[href='#'], .menu a[href='']").unbind('click').css("cursor", "default");

编辑:

似乎.unbind只会取消绑定使用.bind方法绑定的事件:/

.removeAttr是是:)

How about looping through the anchors with an empty href or "#" href only.

$(".menu a[href='#'], .menu a[href='']").unbind('click').css("cursor", "default");

EDIT:

Seems .unbind will only unbind events that you have bound using the .bind method :/

.removeAttr is is :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文