2013-08-19 24 views
12

Bildiğimiz kadarıyla, klavyede TAB tuşunu basılı tuttuğumuzda, açık web sayfasındaki tüm aktif href linkleri arasında gezinmemizi sağlıyor. Bu URL'leri JavaScript ile okumak mümkün mü?Kullanım amaçlı JavaScript Kullanım Tablosu Tuşa basın

örnek:

function checkTabPress(key_val) { 
    if (event.keyCode == 9) { 
     // Here read the active selected link. 
    } 
} 
+2

Halihazırda odaklanmış olan öğeyi (varsa, ya da "gövde") almak için 'document.activeElement 'dosyasına bakın. .nodeName.toUpperCase() === "a" 'yi kontrol edip' .href 'özelliğini okuyabilirsiniz. – Ian

+0

Bu soruya bir bakın (test etmediniz). http://stackoverflow.com/questions/11277989/how-to-get-the-focused-element-with-jquery –

+2

@Ian Bunu mu demek istediniz .toLowerCase() '? –

cevap

6

Having aşağıdaki html:

<!-- note that not all browsers focus on links when Tab is pressed --> 
<a href="http://example.com">Link</a> 

<input type="text" placeholder="Some input" /> 
<a href="http://example.com">Another Link</a> 

<textarea>...</textarea> 

Sen ile aktif bir bağlantı alabilirsiniz: Burada

// event listener for keyup 
function checkTabPress(e) { 
    "use strict"; 
    // pick passed event or global event object if passed one is empty 
    e = e || event; 
    var activeElement; 
    if (e.keyCode == 9) { 
     // Here read the active selected link. 
     activeElement = document.activeElement; 
     // If HTML element is an anchor <a> 
     if (activeElement.tagName.toLowerCase() == 'a') 
      // get it's hyperlink 
      alert(activeElement.href); 
    } 
} 

var body = document.querySelector('body'); 
body.addEventListener('keyup', checkTabPress); 

working example olduğunu. Ben keyUp olay için document elemana bir event listener bağlı olan

function checkTabPress(e) { 
    'use strict'; 
    var ele = document.activeElement; 

    if (e.keyCode === 9 && ele.nodeName.toLowerCase() === 'a') { 
     console.log(ele.href); 
    } 
} 

document.addEventListener('keyup', function (e) { 
    checkTabPress(e); 
}, false); 

, bir işlev tetikler:

<a href='https://facebook.com/'>Facebook</a> 
<a href='https://google.ca/'>Google</a> 
<input type='text' placeholder='an input box'> 

Bu JavaScript kullanabilirsiniz: HTML kodu bu parça Verilen

+0

Bu örnek çalışmıyor ... –

+0

@ rink.attendant.6 Oldukça eminim. [Tam ekran sonucu] (http://jsfiddle.net/kolkabes/esMQD/embedded/result/) 'ı deneyin ve Tab tuşuna birkaç kez basın. Shift-Tab da çalışıyor. – uKolka

+0

Sözlerimi geri al. Her tarayıcıda yok ama yok. Çapraz tarayıcı koduyla geleyim. – uKolka

1

Tab tuşunun basılı (veya teknik olarak bırakılmış) olup olmadığını kontrol edin.

İşlev, currently focused element ve NodeName'un a olup olmadığını denetler. Eğer öyleyse, if bloğuna girer ve benim durumumda, href özelliğinin değerini JavaScript konsoluna yazar.

İşte sen keyup olayı ile bunu mümkün olmalıdır bir jsFiddle

+0

IE 9, Firefox ve Chrome'un tümü benim için çalışıyor ve tüm değişkenlerim tanımlanıyor. –

+1

Niçin geri arama işlevini başka bir işe yaramaz geri çağırmaya yönlendiriyorsunuz? – uKolka

+0

Çünkü bir parametre iletiyorum. –

8

bu. Spesifik olmak gerekirse, event.target seçilen öğeye işaret etmeli ve event.target.href size o öğenin href değerini verecektir. Daha fazla bilgi için bkz. mdn.

Aşağıdaki kod jQuery'dir, ancak bu kaynak kodu kodunun dışında kalanlar, salt javascript ile aynıdır. Bu, her bağlantı etiketine bağlı bir keyup işleyicisidir. // [\ w:

$('a').on('keyup', function(e) { 
    if(e.which == 9) { 
     console.log(e.target.href); 
    } 
}); 

jsFiddle: (| | ftp https http) http://jsfiddle.net/4PqUF/

+0

Bu, odaklanmış olan yeni öğeye değil, sekme tuşuna basıldığı zaman seçilen öğeyi gösterecektir. Anahtar ne olursa olsun, tuşa basmadan önce – zzzzBov

+1

keydown işlenecektir (ve eğer IE8'de test edebileceğim kadarıyla), anahtarlama yeni bir öğeyi gösterecektir. O anahtarın yapacağı şeyden sonra kovuldu. – Sumurai8

+0

Bunu tamamen reddediyorum. İyi bir nokta. – zzzzBov

-6

Bunu

var urlPattern = /olduğu Sitesi URL için Regular Expression kullanmak gerekir -] + (. [\ w -] +) + ([\ w, @?^=% &:/~ + # -] * [\ w @?^=% &/~ + # -])?/

Bu İfadeyi şu şekilde kullanın:

var regex = new RegExp (urlPattern); var t = 'www.google.com';
var res = t.eşleşme (regex/g);

Dizinin yerine 9

+0

Bu soruya cevap vermek için yeterli değil. – juliocesar

0

Sadece bir öneri değişken t bu javascript dize olarak web sayfasını geçmek ve almak zorunda için, KeyCodes.TAB kullanabilirsiniz.