2011-06-23 17 views
7

Jak mogę uruchomić zdarzenie onclick najpierw przed zdarzeniem onblur, jeśli aktualnie koncentruję się na polu tekstowym w jQuery?jQuery: Jak uruchamiać firewall najpierw przed włączeniem onblur?

Oczekiwany wynik: Uruchomienie zdarzenia kliknięcia przycisku przed wystąpieniem rozmycia w texbox. Alarmy "mybtn onclick alert"

Demo:http://jsfiddle.net/Zk8Fg/

Kod:

<input type="text" name="fname" id="fname" value="" /><br /> 
<input type="button" name="mybtn" id="mybtn" value="Click Me" /> 

<script language="javascript"> 
$(document).ready(function() { 
    myFunc(); 
}); 

function myFunc() { 
    $('#fname').focus().blur(function() { 
     alert('fname onblur alert'); 
    }); 

    $('#mybtn').click(function() { 
     alert('mybtn onclick alert'); 
    }); 
} 
</script> 

Dzięki :)

+0

Co próbujesz zrobić z '$ .focus(). Blur()'? – Sampson

+1

Czy mogę zapytać, dlaczego i/lub co próbujesz zrobić? może ktoś będzie w stanie zaproponować jakieś alternatywy? UI Zdarzenia mają określoną kolejność i nie sądzę, aby można je było zmienić. –

+0

@ Jonathan: Mam sprawdzanie poprawności na zdarzenie rozmycia aktualnie skupione w polu tekstowym, ale scenariusz zamazywania jest po kliknięciu przycisku, a następnie zdarzenie rozmycia jest uruchamiane najpierw niż zdarzenie kliknięcia. – marknt15

Odpowiedz

3

Jeśli pole wejściowe jest obecnie skupiony, nie może skupić się na innym element bez uprzedniego zamazania obecnej ostrości. Niezależnie od tego, co próbujesz zrobić, prawdopodobnie istnieje lepszy sposób.

Widoczne rejestrowanie zdarzeń: http://jsfiddle.net/Zk8Fg/3/

+0

Więc nie jest to możliwe? Może istnieje obejście tego problemu? Dzięki – marknt15

+3

@ marknt15 Nie można odstąpić od standardowej sekwencji zdarzeń, ale to nie znaczy, że niemożliwe jest osiągnięcie tego, co próbujesz zrobić. Daj nam znać, co chcesz osiągnąć, dołożymy wszelkich starań, aby Ci pomóc. – Sampson

6

No to chyba część standardu, który Zdarzenie pierwszy więc prawdopodobnie nie powinno się zmieniać kolejność. To, co możesz zrobić, to odłożyć wynikową operację, korzystając z niewielkiej zwłoki: window.setTimeout.

$('#fname').focus().blur(function() { 
    window.setTimeout(function(){alert('fname onblur alert')},0.1); 
}); 

Zgadzam się z innych uwag chociaż, to naprawdę wygląda jak należy zastanowić się, jak idziesz na ten temat, ponieważ zmiana kolejności wydarzeń domyślne uderza mnie jako lame hack, który prawdopodobnie ma bardziej eleganckie rozwiązanie.

+0

Dziękujemy @SpliFF. To jest najlepsza odpowiedź. :) –

Powiązane problemy