我正在尝试为所有控件使用相同的验证功能。但我在jQuery中不太了解,也无法将事件处理程序传递给触发器。我想将文本框ID传递给我的自定义函数。 我怎么能这样做
<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>
答案 0 :(得分: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()
调用期间指定了其他参数,则这些参数也将传递给处理程序。 / p>
所以你的看起来应该是这样的:
function(event, defaultInputValue, ErrorMessage, ValidMessage)
但如果你描述了你实际得到的错误会更好。
第二个问题:如果我看到第二个绑定在某种程度上没有上下文:
$(document).ready(function(){
$("#txtFirstName").bind('focusout', function(){});
$(this).bind('customblurfocus',function(defaultInputValue,ErrorMessage,ValidMessage)
{ //...
});
});
您要将自定义事件绑定到哪个元素? $(this)
应该是什么?在这种状态下,即使将event
作为第一个参数添加到函数中,这也不起作用
请告诉我们有关您的HTML结构和/或您想要实现的内容的更多信息。
答案 1 :(得分:1)
您可以在绑定事件处理程序的主体内调用自定义函数:
$("#foo").bind("click", function(){
callMyFunction( arg0, arg1, arg2 );
});
E.g。
function customHandler(defaultInputValue,ErrorMessage,ValidMessage) {
// define the body of your custom function here
}
$(this).bind('customblurfocus', function(){
customHandler(defaultInputValue, ErrorMessage, ValidMessage);
});