2012-05-14 10 views
5

Jestem nowicjuszem w JS, mam problem ze zrozumieniem semantyki JQUERY.Początkujący jQuery - funkcja do zainicjowania według czasu

Mam funkcję napisaną do sprawdzania zawartości komórki.

Problem: funkcja rozpoczyna się dopiero, gdy komórka utraci ostrość, jeśli kliknę przycisk Prześlij, błąd wyświetli się pierwszy, a następnie uruchomi się funkcja.

Chcę, aby funkcja działała, nawet gdy jestem w komórce. Jak to zrobić?

inicjatywy to:

$(".user_id").blur(function(){ validateUserId($('.user_id')); }); 

Funkcja:

function validateUserId(reference) { 
    if (5 == $(reference).val().length) { 
     $.get('index.php?user=' + $(reference).val(), function(data) { 
      if ("error" == data) { 
       $(reference).parent().parent().addClass('error'); 
       alert('error'); 
      } else { 
       $(reference).parent().parent().removeClass('error'); 
       $(reference).addClass('valid'); 
       $(reference).parent().parent().addClass('success'); 
      } 
     }); 
    } else { 
     alert('short'); 
     $(reference).parent().parent().addClass('error'); 
    } 
} 
+0

Masz na myśli, kiedy coś piszesz? – VisioN

+0

podstawowy kod HTML również byłby interesujący, nie do końca pewny, co chcesz osiągnąć ... – Peter

+0

może możesz użyć keyup? $ (". user_id"). keyup (function() {validateUserId ($ ('. identyfikator_użytkownika'));}); –

Odpowiedz

0

Spróbuj funkcję związać się na razie skupić

+3

Nie, nie, nie, nie ... – VisioN

4
$(".user_id").on('keyup', function(){ 
    validateUserId($(this)); 
}); 
1

chciałbym użyć zdarzenia keyup. Za każdym razem, gdy ktoś wpisze klucz w komórce wejściowej, funkcja zostanie wykonana.

$(".user_id").on("keyup", function(){ validateUserId($(this)); }); 

Zmieniłem wartość $ (". Id_użytkownika"), z wartości z, na $ (this). Ponieważ chcesz mieć wartość pola, w którym wykonałeś zdarzenie keyup. (A nie inne pole, jeśli nie byłoby 2 pola o tej samej klasie .user_id.)

0
$("input[submit]").click(function(e){ 
    e.preventDefault(); 
    var valid = validateUserId($('.user_id')); // maybe the function could return a boolean value too instead of just adding classes to the HTML part 
    if (valid) { 
     $("#your_form_id").submit(); // only if the input is valid, submit it 
    } 
}); 

sidenote na swój problem: po kliknięciu w przycisk zostanie najpierw wyzwolić przedstawienia działań, które mogą dać ci błąd i następnie wykonanie bloku blur() kodu

0

Oto działająca wersja demonstracyjna http://jsfiddle.net/pomeh/GwswM/. Mam przepisany trochę kodu do:

  • pozycje cache DOM do zmiennych,
  • użyć jQuery metod łańcuchowych,
  • poprawy warunków if flaki z jednakowych znaków,
  • oddzielone AJAX wzywa i logiki aplikacji ,
  • cache identyczne AJAX wzywa,
  • wykorzystanie jQuery deferred ukryć asynchroniczny aspekt weryfikacji (połączony z AJAX)

Mam nadzieję, że to pomoże :)