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.