2013-08-16 80 views
3

我用document.activeElement.href獲得點擊標籤的目標位置。它的工作屬性在Firefox中,但不在鉻工作。document.activeElement.href不適用於鉻

我想要得到"href"點擊(活動)元素位於其他函數外的位置。

這樣的:

function animate() { 
    alert(document.activeElement.href); //not working in chrome 
}); 

非常感謝

編輯: 記住我不想用「這個」或$(本),因爲它不會在功能的元件之外的工作。 我知道我可以使用onclick="...."然後使用"$(this)"爲每個元素,但我不想這樣。

我的問題很簡單:

可我獲得點擊(活動)elementID的功能之外呢? (除火狐)

+0

@Liam,你的鏈接說'activeElement'由Chrome瀏覽器支持2 (MDN [同樣說](https://developer.mozilla.org/en-US/docs/Web/API/document.activeElement),接受的回答稱Chrome 9+是一款顯然是一個錯誤)。 –

+0

@FrédéricHamidi,抱歉必須誤讀它。我的壞 – Liam

+0

@Nader,在調用'animate()'之前,你有沒有把焦點設置到另一個元素? –

回答

2

下面是一個解決方案使用addEventListenerVanilla JS

document.addEventListener('click', function (e) { 
    var elm = e.target; 
    if (elm && elm.nodeType === 1 && elm.nodeName === 'A') { 
     alert(elm.href); 
    } 
}); 
+0

爲Vanilla JS提供+1,這是所有最強大的JS!即使jQuery使用它! :D –

+0

@Kolink,但'nodeName'保證在所有實現上返回一個大寫元素名稱?我會申請'toUpperCase()'來確定,但是使用非香草庫首先會隱藏它;) –

+0

'nodeName'是標籤的大寫名稱(在元素節點上,已經建立'nodeType === 1'),這就是它的定義。 –

1

你可以這樣做與jQuery

$(document).on('click', 'a', function() { 
     alert($(this).attr('href')); 
}); 

這樣做雖然取決於當你真正打電話給你的事件。你沒有指定這個,所以很難說。

+2

在這種情況下,您不需要準備好包裝。 – ThiefMaster

+0

@ThiefMaster,真的是爲什麼?我怎麼能保證沒有準備好jquery被加載? – Liam

+0

@Liam,'document'總是存在的,'on()'將事件委託給它。即使DOM沒有準備好,但這種綁定也可以工作(但是,如果jQuery沒有被加載,那當然不會)。 –

2

該元素將側重然後

$("a:focus").prop("href") 

http://jsfiddle.net/kYJ3n/

+0

好主意,因爲':focus'明確記錄爲不等同於'$(document.activeElement)'。 –

+2

謝謝,但它沒有奏效!你可以使用alert($(「a:focus」)。prop(「href」));並看到不在鉻和safari中工作;) – Nader

+0

@Nader只需將tabindex添加到您的元素;)[http://jsfiddle.net/kYJ3n/1/](http://jsfiddle.net/kYJ3n/1/) – rps