2012-11-06 44 views
1

如何確保這個href元素會觸發「click」事件,除非它沒有「disablelink」類。沒有類的元素上的jquery點擊事件

不處理:

<a class="iconGear download disablelink" href="#">Download</a> 

過程:

<a class="iconGear download" href="#">Download</a> 

嘗試這樣做沒有成功:

$("a.download").not(".disablelink").click(function (e) { 
     alert('in'); 
     e.preventDefault(); 
    }); 

回答

5

這應該工作:

$("a.download:not('.disablelink')").click(function (e) { 
    alert('in'); 
    e.preventDefault(); 
}); 

如果disablelink類被動態地添加:

$(document).on('click', "a.download:not('.disablelink')", function (e) { 
    alert('in'); 
    e.preventDefault(); 
}); 

檢查此演示http://jsfiddle.net/d3rXr/1/

+0

如果他動態地添加disablelink類,這將不起作用。 – Rodik

+0

..加上它與OP已經使用的完全相同的陳述,只是更慢。 – jAndy

+0

@Rodik - 添加了一個變體,即使動態添加類也應該可以工作。 – techfoobar

0
$('a.download').click(function(e){ 
    e.preventDefault(); 
    if($(this).hasClass('disablelink')){ 
     return; 
    }else{ 
     //other stuff; 
    } 
}); 

爲什麼不是你檢查什麼時候錨點被點擊了,如果它有類,它返回並且什麼也不做,這將是更可讀的代碼,我猜。

+0

我不想這樣做。 – ShaneKm

+0

如果還有其他問題,有什麼大不了的? –

+0

你要求做些什麼**如果**一些表達是真的......只有沒有**如果**聲明... – Rodik

0

你可以是這樣的:

$("a.download").click(function(e) { 
    if($(this).hasClass("disablelink")) { 
     return false; 
    } 
    // Normal code 
    alert('in'); 
    e.preventDefault(); 
}); 
0

首先,這可能不起作用,因爲某些環節已經disablelink加入到他們動態的,以後他們已經綁定到這些單擊處理程序。

其次,你應該檢查單擊處理程序內部的類,如下所示:

$("a.download").click(function (e) { 
    if($(this).hasClass('disablelink')){ 
     e.preventDefault(); 
     // link is disabled 
    }else{ 
     alert('in'); 
     // link is active 
    } 
}); 
相關問題