JQuery ile odaklanmış eleman nasıl elde edilir?


Yanıtlar:


740
// Get the focused element:
var $focused = $(':focus');

// No jQuery:
var focused = document.activeElement;

// Does the element have focus:
var hasFocus = $('foo').is(':focus');

// No jQuery:
elem === elem.ownerDocument.activeElement;

Hangisini kullanmalısın? jQuery dokümanlarından alıntı yapmak :

Diğer sözde sınıf seçicilerinde olduğu gibi (":" ile başlayanlar) öncesinde şunlar önerilir: bir etiket adı veya başka bir seçiciyle odaklanma; aksi takdirde, evrensel seçici ("*") ima edilir. Başka bir deyişle, çıplak buna $(':focus')eşdeğerdir $('*:focus'). Şu anda odaklanmış öğeyi arıyorsanız, $ (document.activeElement) tüm DOM ağacını aramak zorunda kalmadan öğeyi alır.

Cevap:

document.activeElement

Ve öğeyi saran bir jQuery nesnesi istiyorsanız:

$(document.activeElement)

2
ama bekleyin, düzeltme işareti olan öğeyi nasıl alabilirim?
dave

@dave. Ne demek "şapka var" ? odaklanmış? fare üstünde mi?
gdoron, Monica

iyi benim durumum: belirli bir öğeyi tıklattığınızda, son odaklanmış giriş metin öğesinde bir karakter yerleştirmek istiyorum. Temel olarak, belirli bir öğeyi tıklamadan önce en son veya sağa odaklanan öğe.
dave

1
@dave. Bu yapılamaz. Bence sadece IE bu özelliğe sahip, ama şimdi farklı bir soru soruyorsun, bunu yeni bir soruda yapmalısın.
gdoron, Monica

3
Ben $focusedvar bir jquery nesnesi olduğunu göstermek için yaptığınızı varsayalım , $ önek değişken adını kullandığınız gibi . TYVM.
Valamas


6

Firefox, Chrome, IE9 ve Safari'de iki yol test ettim.

(1). $(document.activeElement)Firefox, Chrome ve Safari'de beklendiği gibi çalışır.

(2). $(':focus')Firefox ve Safari'de beklendiği gibi çalışır.

'İsim' girmek için fareye girdim ve klavyede Enter tuşuna bastım, sonra odaklanılan öğeyi almaya çalıştım.

(1). $(document.activeElement)Firefox, Chrome ve Safari'de beklendiği gibi input: text: name döndürür, ancak IE9'da input: Submit: addPassword değerini döndürür

(2). $(':focus')giriş: metin: Firefox ve Safari'de beklendiği gibi bir ad döndürür, ancak IE'de hiçbir şey

<form action="">
    <div id="block-1" class="border">
        <h4>block-1</h4>
        <input type="text" value="enter name here" name="name"/>            
        <input type="button" value="Add name" name="addName"/>
    </div>
    <div id="block-2" class="border">
        <h4>block-2</h4>
        <input type="text" value="enter password here" name="password"/>            
        <input type="submit" value="Add password" name="addPassword"/>
    </div>
</form>

5

Bunu dene:

$(":focus").each(function() {
    alert("Focused Elem_id = "+ this.id );
});

Evet, bu yüzden bu döngüde tek bir yineleme olacaktır. uyarı sadece örneği göstermek içindir. Bu değişkene sahipseniz, istediğiniz öğeyle her şeyi yapabilirsiniz.
Adil Malik

Birden fazla öğeye odaklanmak nasıl mümkün olabilir?
Andreas Furster

@AndreasFurster haklısın. Bu döngüde her zaman yalnızca bir yineleme olacaktır. Bu hedefe ulaşmak için en iyi yol olmayabilir, ancak işe yarar.
Adil Malik

Bunun neden bunu yapmanın en kötü / en az etkili yolu olduğunu öğrenmek için kabul edilen cevaba bakın. (gereksiz .eachdayanılmaz)
Brad Kent

2

Kimseden nasıl bahsedilmedi ..

document.activeElement.id

IE8 kullanıyorum ve başka bir tarayıcıda test etmedim. Benim durumumda, bir alanın en az 4 karakter olduğundan ve harekete geçmeden önce odaklandığından emin olmak için kullanıyorum. 4. numarayı girdikten sonra tetiklenir. Alanın 'yıl' kimliği vardır. Ben kullanıyorum..

if( $('#year').val().length >= 4 && document.activeElement.id == "year" ) {
    // action here
}

1

$(':focus')[0] size asıl öğeyi verecektir.

$(':focus') size bir dizi öğe verir, genellikle bir kerede yalnızca bir öğe odaklanır, bu nedenle yalnızca bir şekilde birden fazla öğeye odaklanmışsanız daha iyi olur.



0

Odağın bir öğeyle olup olmadığını onaylamak istiyorsanız

if ($('#inputId').is(':focus')) {
    //your code
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.