2013-06-16 11 views

Odpowiedz

5

powiedzieć między "Focus" zdarzenia, które pochodzą z klawiatury i te, które pochodzą od myszy, można śledzić t zdarzenia myszy.

Po pierwsze, aby zrozumieć sekwencję zdarzeń, które dzieją się po kliknięciu wejście lub kartę do niego, spojrzeć na poniższym jsfiddle: http://jsfiddle.net/orlenko/fyFkk/

w nim, będziemy zalogować mouseDown, mouseUp, kliknij, ostrość i rozmycia zdarzenia \

<input type="text" id="zero"/> 
<input type="text" id="one"/> 

JavaScript.

$(function() { 
    var one = $('#one'); 

    one.mousedown(function() { 
     console.log('mousedown'); 
    }); 

    one.mouseup(function() { 
     console.log('mouseup'); 
    }); 

    one.click(function() { 
     console.log('click'); 
    }); 

    one.focus(function() { 
     console.log('focus'); 
    }); 

    one.blur(function() { 
     console.log('blur'); 
    }); 

}); 

Gdybyśmy po prostu kliknij na wejściu, a następnie na innej kontroli, dostaniemy następujące:

  • mouseDown
  • ostrości
  • mouseUp
  • kliknięcie
  • rozmycie

Ale jeśli zakładka do i od wejścia, zobaczymy w konsoli:

  • focus
  • rozmycie

Jeśli więc śledzić mousedown i rozmycia wydarzeń, możemy powiedzieć między naciskiem klawiatury i jeden opartych na bazie myszy. Na przykład:

$(function() { 
    var one = $('#one'); 

    one.mousedown(function() { 
     console.log('mousedown'); 
     $(this).data('mousedown', true); 
    }); 

    one.mouseup(function() { 
     console.log('mouseup'); 
    }); 

    one.click(function() { 
     console.log('click'); 
    }); 

    one.focus(function() { 
     if ($(this).data('mousedown')) { 
      console.log('You clicked it!'); 
     } else { 
      console.log('You tabbed it!'); 
     } 
    }); 

    one.blur(function() { 
     console.log('blur'); 
     $(this).data('mousedown', false); 
    }); 

}); 

ryba z tego przykładu: http://jsfiddle.net/orlenko/cwRAw/

+0

+1 Dla pełnego wyjaśnienia :) –

+0

Nie wiedziałem, że to również uruchamia zdarzenia myszy, dobry anons. – Tachi

1

Zastosowanie keyup

$('#input').keyup(function(){ 
    alert('Called only when the focus is on element through keypress'); 
}); 
+2

Problem z 'keyup' polega na tym, że odpala * po * fokusie. – orlenko

1
function ren(){ 

    alert('Holla!'); 

} 
$('input').focus(ren); 
$('input').mousedown(function(){  
$('input').off('focus',ren); 
}); 
$('input').mouseup(function(){  
$('input').on('focus',ren); 
}); 

Nie sprawdzić w funkcji ostrości zamiast usunąć funkcję ostrości podczas dokonywania Click

Demonstration

+1

Twoja funkcja wysyła przeglądarkę do nieskończonej pętli alarmowej. – Antony

+0

@Antony sprawdź teraz – bugwheels94

+1

Teraz działa. – Antony

Powiązane problemy