2009-08-04 16 views
7

Jak przekazać argumenty do funkcji obsługi zdarzeń? Ta funkcja uruchamia się po załadowaniu strony, co nie jest pożądanym efektem. Potrzebuję tego rutynowego "validateText", aby działał na kilku różnych polach tekstowych, kombinacjach rozwijanych. Czy mogę ponownie użyć "validateText" zamiast tworzyć jedną kombinację tekstu/listy rozwijanej?jQuery, jak mogę przekazać args do obsługi zdarzenia?

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

Odpowiedz

5

Powodem wywołania podczas ładowania jest fakt, że przekazanie nazwy funkcji za pomocą argumentów aktywnie ją wywołuje. Możesz efektywnie naśladować to, czego szukasz, zawijając połączenie do validateText w anonimowej funkcji, takiej jak ta.

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

Funkcja anonimowa, ponieważ jest za pomocą „to” słowo kluczowe, należy przeskalować trochę lepiej ze swojej początkowej selektora jeśli go zmienić od #myTextbox do textarea lub cokolwiek. =)

+0

Dzięki Brian. To działało świetnie! – Hcabnettek

+0

Z technicznego punktu widzenia powodem, dla którego jest wykonywana, jest to, że podczas wywoływania funkcji wywołania jQuery żądano wskaźnika funkcji - dlatego funkcja anonimowa działa. – Nic

11

Zastosowanie wiążący przekazać dodatkowe parametry do detektora zdarzeń:

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

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

Wtedy dostęp do danych z event.data:

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

fajnie, spróbuję. Wygląda to na właściwy sposób. Dzięki! – Hcabnettek

+0

Bez problemu. Anonimowa funkcja jest prawdopodobnie prostszym sposobem, aby to zrobić, jeśli używasz procedury gdziekolwiek indziej. – camwest

Powiązane problemy