只有在网格控件中选择了元素时,我的页面上的某些超链接才能启用。
当我在页面上选择了一行时,我有机会注入一些代码,并且我想使用jquery代码启用/禁用这些超链接。
有什么建议吗?
答案 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,以便为用户提供禁用该链接的可视提示。