2009-08-04 16 views
7

¿Cómo puedo pasar args a la función del controlador de eventos? Esto ejecuta la función en carga de página que no es el efecto deseado. Necesito esta rutina "validateText" para ejecutar contra varias combinaciones de cuadros de texto, desplegables. ¿Puedo reutilizar "validateText" en lugar de crear uno por combinación de texto/lista desplegable?jQuery, ¿cómo puedo pasar args al controlador de eventos?

//add blur event handler to the textbox with jQuery when the page is finished loading 
    $(document).ready(function() { 
     $("#myTextbox").blur(validateText($("#myTextbox"), $("#Select1"))); 
    }) 


    function validateText(textbox, dropdown) { 

     var message = $("#message"); 
     var isValid = false; 
     //get the value the user type in 
     var textboxValue = $(textbox).val(); 

     //get the options from the lookup 
     var options = $("option", dropdown); 

     //loop through the options and compare it to "value" 
     options.each(function() { 
      var optValue = $(this).val(); 
      if (optValue === textboxValue) { 
       isValid = true; 
      } 
     }); 

     if (!isValid) 
      message.text(textboxValue + " is not a valid value from the list."); 
     else 
      message.text(textboxValue + " is perfectly valid."); 
    } 

Respuesta

5

La razón por la que llama a carga se debe a la entrega de un nombre de función con argumentos llama activamente. Puedes imitar de forma efectiva lo que estás buscando envolviendo la llamada para validar el texto en una función anónima como esa.

$(document).ready(function() { 
    $("#myTextbox").blur(function(){ 
     // Since in your original example you used $("#myTextbox") as an arg, this mimics it 
     validateText($(this), $("#Select1")); 
    }); 
}); 

La función anónima, ya que es a través del 'este' palabra clave, debe escalar un poco mejor con su selector inicial si cambia desde #myTextbox al área de texto o lo que sea. =)

+0

Gracias Brian. Esto funcionó muy bien! – Hcabnettek

+0

Técnicamente, la razón por la que se está ejecutando es porque estaba pasando una llamada a una función cuando las devoluciones de llamada jQuery solicitan un puntero a la función, que es la razón por la cual funciona la función anónima. – Nic

11

vinculante para pasar parámetros adicionales a un detector de eventos Uso:

http://docs.jquery.com/Events/bind

$(document).ready(function() { 
    $("#myTextbox").bind("blur", [ $("#myTextBox"), $("#Select1")], validateText); 
}) 

luego acceder a los datos de event.data:

function validateText(event) { 
    textBox = event.data[0]; 
    dropdown = event.data[1]; 
} 
+0

genial, voy a intentar esto. Parece la forma correcta de hacerlo. ¡Gracias! – Hcabnettek

+0

No hay problema. Sin embargo, la función anónima es la forma más sencilla de hacerlo si está utilizando el procedimiento en cualquier otro lugar. – camwest

Cuestiones relacionadas