2012-05-14 8 views
5

Ich bin ein Anfänger in JS, habe ein Problem, JQUERY Semantik zu verstehen.jquery Anfänger - Funktion zum Initiieren von Zeit

Ich habe eine Funktion geschrieben, um den Inhalt einer Zelle zu überprüfen.

Problem: die Funktion startet nur, wenn die Zelle den Fokus verliert, wenn ich auf Senden klicken, wird der Fehler zuerst angezeigt, dann wird die Funktion ausgeführt.

Ich möchte die Funktion ausführen, auch wenn ich in der Zelle bin. Wie es geht?

durch diese Initiative:

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

Die Funktion:

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

Sie meinen, wenn Sie etwas eingeben? – VisioN

+0

der zugrunde liegende HTML wäre auch interessant, nicht ganz sicher, was Sie erreichen möchten ... – Peter

+0

vielleicht können Sie keyup verwenden? $ (". user_id"). keyup (function() {validateUserId ($ ('. user_id'));}); –

Antwort

0

Try-Funktion Fokus Ereignis zu binden

+3

Nein nein nein nein nein ... – VisioN

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

i das KeyUp-Ereignis verwenden würde. Jedes Mal, wenn jemand einen Schlüssel in Ihre Eingabezelle eingibt, wird die Funktion ausgeführt.

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

Ich habe die $ ("user_id"), nehmen Sie den Wert aus, auf $ (this). Da Sie den Wert des Felds haben möchten, für das Sie das Keyup-Ereignis aktiviert haben. (Und kein anderes Feld, wenn es zwei Felder mit der gleichen .user_id Klasse sein würde.)

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 
    } 
}); 

Bemerkung am Rande auf Ihr Problem: Wenn Sie den Absenden-Button klicken, wird es zuerst die Trigger-Aktion vorzulegen, die möglicherweise geben ein Fehler und dann führen Sie die blur() Codeblock

0

Hier ist eine funktionierende Demo http://jsfiddle.net/pomeh/GwswM/. Ich habe ein wenig umgeschrieben der Code:

  • Cache DOM Auswahlen in Variablen,
  • Verwendung jQuery Methoden Verkettungs,
  • verbessern if Bedingungen mit Kutteln Gleichheitszeichen
  • getrennt AJAX-Aufrufe und Anwendungslogik ,
  • Cache identisch AJAX aufruft,
  • Verwendung jQuery deferred den asynchronen Aspekt der Verifikation (verknüpft mit AJAX)
  • verstecken

Hoffe das hilft :)

Verwandte Themen