2009-08-04 23 views
7

Arches olay işleyici işlevine nasıl geçirebilirim? Bu, istenen etkiye sahip olmayan sayfa yükü işlevini çalıştırır. Birkaç farklı metin kutusuna, açılır kapanır kombinasyonuna karşı çalıştırmak için bu rutin "validateText" e ihtiyacım var. Metin/açılır menüde bir tane oluşturmak yerine "validateText" i yeniden kullanabilir miyim? bağımsız değişken içeren bir işlev adı teslim aktif olarak tanımlar çünküjQuery, yayınları olay işleyicisine nasıl iletebilirim?

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

cevap

5

o yükte çağırır nedenidir. ValidateText için çağrıyı böyle anonim bir işlevle sarmalayarak, aradığınız şeyi etkin bir şekilde taklit edebilirsiniz. o 'Bu' anahtar sözcüğünü kullanarak olacağından textarea ya da her türlü #myTextbox onu değiştirirseniz

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

anonim işlev, başlangıçtaki seçici ile biraz daha iyi ölçek gerekir. =) Bir olay dinleyicisi için ekstra parametreleri geçirmek için bağlayıcı

+0

teşekkürler Brian. Bu harika çalıştı! – Hcabnettek

+0

Teknik olarak, yürütme nedeni, jQuery geri aramaları işlev işaretçisi istediğinde bir işlev çağrısında geçiyor olmanızdır; bu nedenle anonim işlev neden çalışır. – Nic

11

Kullanım:

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

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

Sonra event.data gelen verilere erişmek:

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

havalı, bunu deneyeceğim. Bunu yapmak için uygun bir yol gibi görünüyor. Teşekkürler! – Hcabnettek

+0

Sorun değil. Anonim işlev, prosedürü başka bir yerde kullanıyorsanız, muhtemelen bunu yapmanın daha basit bir yoludur. – camwest

İlgili konular