2010-04-07 2 views
6

Sto tentando di utilizzare la stessa funzione di convalida per tutti i miei controlli. Ma non conosco molto in jQuery e non sono stato in grado di passare il gestore di eventi al trigger. Voglio passare l'ID della casella di testo alla mia funzione personalizzata. Come posso fare questocome utilizzare il trigger in Jquery per passare i dati dei parametri e come controllo (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> 

risposta

10

Aggiornamento: credo di aver capito ciò che si vuole raggiungere e questo dovrebbe funzionare (non c'è bisogno di eventi personalizzati):

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

Se avete domande, basta chiedere:)


Il primo parametro del gestore di eventi associato è l'oggetto evento stesso. Vedere l'esempio dalla .trigger() documentation:

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

e:

L'oggetto evento viene sempre passato come primo parametro per un gestore di eventi, ma se vengono specificati ulteriori parametri durante una .trigger() chiamata come sono qui, questi parametri saranno passati anche al gestore.

Così vostro dovrebbe essere simile a questo:

function(event, defaultInputValue, ErrorMessage, ValidMessage) 

ma sarebbe meglio se hai descritto quale errore non effettivamente ottenere.


Seconda questione: Se vedo correttamente la seconda bind è in qualche modo senza contesto:

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

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

Per quale elemento cosa desiderate vincolare il proprio evento personalizzato? Cosa dovrebbe essere $(this)? In questo stato, anche con l'aggiunta di event come primo parametro alla funzione, questo non funzionerà.
Per favore dicci di più sulla tua struttura HTML e/o cosa vuoi ottenere.

1

Si può solo effettuare la chiamata per la funzione personalizzata all'interno del corpo del gestore di eventi legati:

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

Ad es

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

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