で追加および削除されるinput
and クラスがあります。active
mousedown
mouseup
マウスカーソルを入力の上に置くとうまく機能します。
問題は、mouseup
クリックした後、カーソルを押したinput
ままにしてカーソルを削除した後に機能しないことです-クラスactive
は削除されません。
修正できますか?
で追加および削除されるinput
and クラスがあります。active
mousedown
mouseup
マウスカーソルを入力の上に置くとうまく機能します。
問題は、mouseup
クリックした後、カーソルを押したinput
ままにしてカーソルを削除した後に機能しないことです-クラスactive
は削除されません。
修正できますか?
これmouseup
は、 が入力ではなく外部で発生したためです。document
そのために、オブジェクトで汎用イベント ハンドラーを使用できます。
$(document).mouseup(function() {
$('input.active').removeClass('active');
});
CSSソリューションを提案します。このルールで同じ効果を得ることができます:
input:active{
outline: 10px solid #000;
}
(IE8+)
イベント focusin および focusout をリッスンすることをお勧めします。キーボードで入力を選択したり、キーボードでそれらをそのままにした場合、マウスイベントは発生しません。
次のように実行できます。
$('input').on('focusin focusout', function(event) {
$(this).toggleClass('active', event.type==='focusin');
});
マウスを内側に置いてマウスを外側にドラッグすると、要素にまだフォーカスがあるため、説明している問題は引き続き発生しますが、入力にはまだフォーカスがあるため、問題ないと思います。
マウスイベントで完全に処理し、マウスを外側にドラッグするというこの問題を考慮したい場合は、dom オブジェクトにマウスイベントを実装してから、ハンドラー内の適切な要素を確認する必要があります。
さて、私はこれを修正するために多くの方法を試しました。
mouseup
をwithに置き換えると、より良い結果が得られmouseout
ます。
マウスを使用しているため、ホバーしていないときにクラスを削除するだけです。
次のコードを確認してください。
$('input').bind('click mouseup mousedown', function(event) { // クリック イベントのコード
if (event.type == 'mousedown'){
console.log('mousedown');
$(this).addClass('active');
}
if (event.type == 'mouseup'){
console.log('mouseup');
$(this).removeClass('active');
}
//console.log(event.type);
}); http://jsfiddle.net/rpfHw/3/
一番