2010-04-07 8 views
6

Estoy tratando de usar la misma función de validación para todos mis controles. Pero no sé mucho en jQuery y no he podido pasar el controlador de eventos al disparador. Quiero pasar el ID de la caja de texto a mi función personalizada. ¿Cómo puedo hacer estocómo utilizar el desencadenante en Jquery para pasar datos de parámetros y control (esto)

<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> 

Respuesta

10

Actualización: creo que me di cuenta de lo que quiere lograr, y esto debería funcionar (no hay necesidad de eventos personalizados):

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

Si tiene alguna pregunta, simplemente pregunta:)


El primer parámetro de su controlador de eventos enlazados es el objeto de evento en sí. Vea el ejemplo de la .trigger() documentation:

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

y:

El objeto de evento siempre se pasa como el primer parámetro a un controlador de eventos, pero si se especifican parámetros adicionales durante una llamada .trigger(), ya que son aquí, estos parámetros también se transmitirán al manejador.

así que el suyo debe tener este aspecto:

function(event, defaultInputValue, ErrorMessage, ValidMessage) 

pero sería mejor si usted describió qué error usted consigue realmente.


Segunda edición: Si veo correctamente la segunda se unen de alguna manera es sin contexto:

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

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

Para qué elemento quiere usted para vincular a su evento personalizado? ¿Qué debería ser $(this)? En este estado, incluso si se agrega event como primer parámetro de la función, esto no funcionará.
Cuéntanos más acerca de tu estructura de HTML o de lo que quieras lograr.

1

Usted sólo puede hacer la llamada a la función personalizada dentro del cuerpo del controlador de eventos límite:

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

P. ej

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

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