2012-11-14 29 views
0

我有一個列表jQuery的不點擊

HTML

<a href="#" class="chosenflag" data-flag="de"><img class="flag" src="" alt="" /></a> 
<ul class="choices"> 
     <li><a href="#" data-flag="en"><img class="flag" src="/img/flag/United Kingdom.png" alt="" /></a></li> 
     <li><a href="#" data-flag="de"><img class="flag" src="/img/flag/Germany.png" alt="" /></a></li> 
     <li><a href="#" data-flag="es"><img class="flag" src="/img/flag/Spain.png" alt="" /></a></li> 
     <li><a href="#" data-flag="fr"><img class="flag" src="/img/flag/France.png" alt="" /></a></li> 
     <li><a href="#" data-flag="it"><img class="flag" src="/img/flag/Italy.png" alt="" /></a></li> 
    </ul> 

我試圖代碼jQuery中的能力,只允許一切,但名單元素的動作這就是數據標誌匹配.chosenflag類

我嘗試以下,但無濟於事

的jQuery

var compareflag = $('.chosenflag').attr('data-flag'); 
$('.choices li:not(.chosenflag[data-flag="'+compareflag+'") a').click(function(e){ 
     e.preventDefault(); 
     console.log("clicked"); 
    }); 

jsFiddle 可能有人也許幫助我與我的代碼?

回答

3

在事件處理程序的聲明過程中,您不能使用變量,因爲它將使用賦值的值,然後永遠不會更改 - 它將在以後始終查找相同的內容。相反,請在內部比較事件處理程序。這是很難解釋我的意思,但這裏的代碼和一個工作環節...

$(".choices li a").click(function(e){ 
    var compareflag = $(".chosenflag").data("flag"); 
    if ($(this).data("flag") != compareflag) { 
     e.preventDefault(); 
     alert("clicked"); 
    } 
});​ 

jsFiddle link

+0

+1只OP想要防止選擇標誌的默認值,但這是一個小的改變 – Andomar

+0

@Andomar感謝您指出 - 我現在修復它:) – Archer

+0

爲什麼要使用attr('data-flag');'和'data( 「標誌」)'在相同的代碼? –

0
var compareflag = $('.chosenflag').attr('data-flag'); 

$('.choices li a:not([data-flag="'+compareflag+'"])').click(function(e){ 
    alert("clicked"); 
    e.preventDefault(); 
}); 

工作實例:http://jsfiddle.net/XCQdR/10/

+0

':不'應該''有''在這裏,否則工作。 – Andomar

+0

如何改變功能?我有一個工作的例子,但我會很樂意聽到你的想法詳細闡述。我認爲OP希望阻止點擊具有與所選標記的數據標記相匹配的數據標記的鏈接。 –

+0

這就是爲什麼只有一個列表項應該得到點擊處理程序,而不是四個 – Andomar

0

正如在另一個答案中提到的,你缺少],但你的選擇器也是錯誤的。您使用的是not選擇上li,並傳遞.chosenflag類,它應該是在a,沒有.chosenflag類,如:

$('.choices li a:not([data-flag="' + compareflag + '"])') 

Working fiddle