2010-04-07 13 views
6

我想爲我的所有控件使用相同的驗證函數。但我對jQuery瞭解不多,並且無法將事件處理函數傳遞給觸發器。我想將文本框ID傳遞給我的自定義函數。 我怎樣才能做到這一點如何在Jquery中使用觸發器傳遞參數數據以及控制(this)

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

回答

10

更新:我想我想通了,你想實現什麼,這應該工作(有在自定義事件沒有必要):

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

如果您有任何問題,只是問: )


綁定事件處理函數的第一個參數是事件對象本身。看到從.trigger() documentation的例子:

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

和:

事件對象總是作爲第一個參數到事件處理程序傳遞,但如果一個.trigger()呼叫,因爲它們是在被指定附加參數在這裏,這些參數也會傳遞給處理程序。

所以你應該是這樣的:

function(event, defaultInputValue, ErrorMessage, ValidMessage) 

但是,如果你所描述的錯誤你實際上得到它的效果會更好。


第二期:如果我看到正確的第二個綁定是某種沒有上下文:

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

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

做你想要你的自定義事件綁定哪個元素? $(this)應該是什麼?在此狀態下,即使將event作爲函數的第一個參數添加,也不會起作用。
請告訴我們更多關於您的HTML結構和/或您想要實現的內容。

1

您只需撥打電話到您的自定義功能,結合事件處理程序的正文中:

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

例如

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

$(this).bind('customblurfocus', function(){ 
    customHandler(defaultInputValue, ErrorMessage, ValidMessage); 
}); 
相關問題