2010-04-07 9 views
6

Ich versuche, die gleiche Validierungsfunktion für alle meine Steuerelemente zu verwenden. Aber ich weiß nicht viel in jQuery und war nicht in der Lage, Ereignishandler an den Auslöser zu übergeben. Ich möchte die Textbox-ID an meine benutzerdefinierte Funktion übergeben. Wie kann ich daswie Trigger in Jquery zu übergeben Parameterdaten sowie Kontrolle (this)

<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function(){ 
    $("#txtFirstName").bind('focusout', function() 
    { 
    $(this).trigger("customblurfocus",[$(this).val(), $(this).val() + " Required !", "Ok !"]); 
    } 
); 

    $(this).bind('customblurfocus',function(defaultInputValue,ErrorMessage,ValidMessage) 
    {alert($(this).val()); 
    if($(this).val()=="" || $(this).val()==defaultInputValue) 
     { 
     $(this).val(defaultInputValue); 
     $(this).siblings("span[id*='error']").toggleClass("error_set").text(ErrorMessage).fadeOut(3000); 
     } 
    else 
     { 
     $(this).siblings("span[id*='error']").toggleClass("error_ok").text(ValidMessage).show(1000); 
     } 
    } 
    ); 
    }); 
</script> 

Antwort

10

Update: Ich glaube, ich herausgefunden, was Sie erreichen wollen und dies funktionieren sollte (es gibt keine Notwendigkeit, in benutzerdefinierte Ereignisse):

function validate(element, defaultInputValue, ErrorMessage, ValidMessage) { 
    alert($(this).val()); 
    if($(this).val()=="" || $(this).val()==defaultInputValue) 
    { 
     $(this).val(defaultInputValue); 
     $(this).siblings("span[id*='error']").toggleClass("error_set").text(ErrorMessage).fadeOut(3000); 
    } 
    else 
    { 
     $(this).siblings("span[id*='error']").toggleClass("error_ok").text(ValidMessage).show(1000); 
    } 
} 

$(document).ready(function(){ 
    $("#txtFirstName").bind('focusout', function() { 
     validate(this, "defaultValue here", "Error message here", "Valid message here"); 
    }); 
}); 

Wenn Sie Fragen haben, fragen Sie einfach:)


Der erste Parameter zu Ihrem gebundenen Ereignishandler ist das Ereignisobjekt selbst. Siehe das Beispiel aus dem .trigger() documentation:

$('#foo').bind('custom', function(event, param1, param2) { 
    alert(param1 + "\n" + param2); 
}); 
$('#foo').trigger('custom', ['Custom', 'Event']); 

und:

Das Ereignisobjekt wird immer als ersten Parameter zu einem Event-Handler übergeben, aber wenn zusätzliche Parameter während eines .trigger() Aufruf angegeben, wie sie sind Hier werden diese Parameter auch an den Handler übergeben.

So sollte Ihr wie folgt aussehen:

function(event, defaultInputValue, ErrorMessage, ValidMessage) 

Aber es wäre besser, wenn Sie beschrieben, welche Fehler Sie tatsächlich bekommen.


Zweite Ausgabe: Wenn ich richtig die zweite bind sehen ist irgendwie ohne Kontext:

$(document).ready(function(){ 
    $("#txtFirstName").bind('focusout', function(){}); 

    $(this).bind('customblurfocus',function(defaultInputValue,ErrorMessage,ValidMessage) 
    { //... 
    }); 
}); 

Welches Element sehen Sie Ihr benutzerdefiniertes Ereignis binden mögen? Was sollte $(this) sein? In diesem Zustand, auch wenn event als erster Parameter der Funktion hinzugefügt wird, wird dies nicht funktionieren.
Bitte teilen Sie uns mehr über Ihre HTML-Struktur und/oder was Sie erreichen möchten.

1

Sie können einfach den Anruf an Ihre benutzerdefinierte Funktion innerhalb des Körpers des gebundenen Event-Handler machen:

$("#foo").bind("click", function(){ 
    callMyFunction(arg0, arg1, arg2); 
}); 

Z.B.

function customHandler(defaultInputValue,ErrorMessage,ValidMessage) { 
    // define the body of your custom function here 
} 

$(this).bind('customblurfocus', function(){ 
    customHandler(defaultInputValue, ErrorMessage, ValidMessage); 
});