2

我有一个 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.preventDefault();通过附加替换e.stopPropogation,甚至return false;
尝试替换anchor.bind('click', function(e){anchor.click(function(e) {

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

4

4 回答 4

2

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

于 2011-03-02T10:35:30.957 回答
1

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

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

在代码隐藏中:

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

在源代码中:

<a href="#" id="href" runat="server" onclick="Showpopup();" style="azimuth:left;" >Create New</a>
于 2011-07-28T07:50:31.067 回答
0

仅使用空的 href 或“#” href 遍历锚点怎么样。

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

编辑:

似乎.unbind只会解除您使用该.bind方法绑定的事件:/

.removeAttr伊斯兰国 :)

于 2011-03-02T10:38:11.107 回答
0

而不是删除事件处理程序,为什么不明确地将其替换为以下内容:

anchor.click(function() { return false; });
于 2011-03-02T10:40:08.810 回答