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

时间:2011-03-02 10:31:10

标签: javascript jquery asp.net postback unbind

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

  1. 以防止回发,如果href或 锚标记是“”或“#”。
  2. 使光标不显示 手
  3. 首先,我检查了其中一个生成的锚标记的标记

        <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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

为什么不使用这些简单的代码行,而不是删除eventhandler。

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

在代码隐藏中:

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

在源代码中:

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

答案 2 :(得分:0)

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

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

修改

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

.removeAttr是:)

答案 3 :(得分:0)

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

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