2010-04-07 22 views
6

. Ama jQuery'de fazla bir şey bilmiyorum ve olay işleyicisini tetiğe geçiremedim. Metin kutusu kimliğini özel işlevime iletmek istiyorum. Yapabileceğim Bu nasıl(bu) Ben bütün kontroller için aynı doğrulama işlevini kullanmak çalışıyorum

<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> 
Sadece bağlı olay işleyicisi bünyesinde özel işlevine arama yapabilirsiniz

cevap

10

Güncelleme: Sana ulaşmak istediğiniz hedefe çözdüm ve bu (özel olaylarda gerek yoktur) çalışması gerekir: Sorularınız varsa, sadece sor

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

:) İlgili olay işleyicinizin ilk parametresi, olay nesnesinin kendisidir.

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

ve: .trigger() documentation örneğine bakınız

olay nesnesi, her zaman, bir olay gidericiye ilk parametre olarak geçirilen, ancak ek parametreler olduğu gibi bir .trigger() görüşme sırasında belirtilirse Burada, bu parametreler işleyiciye de iletilecektir.

function(event, defaultInputValue, ErrorMessage, ValidMessage) 

Ama aslında alabilirim hangi hata tarif eğer daha iyi olurdu:

Seninki gibi görünmelidir.


İkinci mesele: Ben görürseniz doğru ikinci bağlama bağlam olmadan nasılsa geçerli:

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

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

hangi eleman size özel etkinliği bağlamak istiyoruz? $(this) ne olmalıdır? Bu durumda, işlev için ilk parametre olarak event eklenmesiyle bile, bu çalışmaz.
HTML yapısı ve/ya da ne elde etmek istiyorsunuz hakkında daha bize bildirin.

1

:

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

Ör

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

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