禁用超链接

时间:2010-10-23 14:21:53

标签: javascript jquery hyperlink

只有在网格控件中选择了元素时,我的页面上的某些超链接才能启用。

当我在页面上选择了一行时,我有机会注入一些代码,并且我想使用jquery代码启用/禁用这些超链接。

有什么建议吗?

2 个答案:

答案 0 :(得分:6)

不要禁用它们会更容易,但仅仅是为了防止它们执行自动执行的操作。我会使用$().delegate执行此操作:

$(document.body).delegate('a', 'click', function(e) {
    if ($(this).is('.disabled')) { // or whatever logic here
        e.preventDefault();
    }
});

您可以在条件子句中使用任何逻辑,例如检查页面上是否存在其他元素,检查配置变量等

编辑如果树上的处理程序停止传播,则无法可靠地工作。如果你有很多函数要做传播,你最简单的解决方案是在每个函数的开头做条件检查:

$('#your_link').click(function(e) {
    if (logic) {
        e.stopPropagation();
        e.preventDefault();
    };

    // the rest of your function here
});

答案 1 :(得分:1)

这将取决于如何选择行。

此示例假定点击<a>.select<tr>的{​​{1}}将禁用行中的所有链接(.select链接除外) href属性。

$('#myTable tr a.select').click( function() {
    $(this).closest('tr').find('a:not(.select)[href]').addClass('disabled');
});

因此,具有.click()处理程序的行中的每个链接应首先检查它是否具有.disabled类,然后再触发其代码。

$('#myTable tr a.someClass').click(function( e ) {
      // sounds like you want these either way?
    e.preventDefault();
    e.stopPropagation();
    if( !$(this).hasClass('disabled') ) {
        // run code when not disabled
    }
});

为此使用类的好处是可以向该类添加CSS,以便为用户提供禁用该链接的可视提示。