jQueryを使用して、キャレット(カーソル)にフォーカスがある入力要素を取得するにはどうすればよいですか?
または、言い換えると、入力にキャレットのフォーカスがあるかどうかをどのように判断するのですか?
jQueryを使用して、キャレット(カーソル)にフォーカスがある入力要素を取得するにはどうすればよいですか?
または、言い換えると、入力にキャレットのフォーカスがあるかどうかをどのように判断するのですか?
回答:
// 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;
あなたはどちらを使うべきですか?jQueryドキュメントを引用する:
他の疑似クラスセレクター( ":"で始まるもの)と同様に、:focusの前にタグ名またはその他のセレクターを置くことをお勧めします。それ以外の場合は、ユニバーサルセレクター( "*")が暗黙指定されます。つまり、bareはと
$(':focus')
同等$('*:focus')
です。現在フォーカスされている要素を探している場合、$(document.activeElement)は、DOMツリー全体を検索する必要なく要素を取得します。
答えは:
document.activeElement
要素をラップするjQueryオブジェクトが必要な場合:
$(document.activeElement)
$focused
がjqueryオブジェクトであることを示すためにそれを行うと想定しているため、$プレフィックス付き変数名を使用した方法が好きです。TYVM。
$( document.activeElement )
jQueryドキュメントで推奨されているように、DOMツリー全体を検索する必要なく、それを取得します
Firefox、Chrome、IE9、Safariの2つの方法でテストしました。
(1)。$(document.activeElement)
Firefox、Chrome、Safariで期待どおりに動作します。
(2)。$(':focus')
FirefoxおよびSafariで期待どおりに動作します。
マウスに移動して「名前」を入力し、キーボードのEnterキーを押してから、フォーカスされている要素を取得しようとしました。
(1)。$(document.activeElement)
Firefox、Chrome、Safariでは期待どおりにinput:text:nameを返しますが、IE9ではinput:submit:addPasswordを返します
(2)。$(':focus')
FirefoxおよびSafariでは期待どおりにinput:text:nameを返しますが、IEでは何も返しません。
<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>
これを試して:
$(":focus").each(function() {
alert("Focused Elem_id = "+ this.id );
});
.each
非存続)
誰も言及していません。
document.activeElement.id
IE8を使用していますが、他のブラウザでテストしていません。私の場合は、フィールドが4文字以上で、演技前に焦点が合っていることを確認するために使用しています。4番目の番号を入力すると、トリガーされます。フィールドのIDは「年」です。使っています..
if( $('#year').val().length >= 4 && document.activeElement.id == "year" ) {
// action here
}
これを試して::
$(document).on("click",function(){
alert(event.target);
});