呼叫功能不工作
我觉得我在用下面的代码呼叫功能不工作
我试图调用双向的功能,但这么想的工作第二种方式this
元素一个问题:
函数validate_email没有响应,我想在第二个例子中调用它是错误的。
的工作方式是:
checking = {};
checking.form = function(){
return{
validate_mail: function(a){
var c=true;
var email_filter = /^[\w.-][email protected][\w.-]+([\.]+([\w]+[\.])?)+[a-zA-Z]{2,6}$/i;
if($.trim(a)!="" && !$.trim(a).match(email_filter))
c=false;
return c;
},
check_mail: function(div_id, error) {
var email = $(div_id + ' input[name=email]').val();
var check = this.validate_mail(email);
if(check==false && $(div_id).is(':visible'))
{
$(div_id + ' '+ error).html('<b>some error</b>');
} else {
$(div_id + ' ' + error).text('');
}
}
}
}();
$(function(){
$('#register input[name=email]').blur(function(){
checking.form.check_mail("#register", ".error_email");
});
}
的不工作的方式是:
checking = {};
checking.form = function(){
return{
validate_mail: function(a){
var c=true;
var email_filter = /^[\w.-][email protected][\w.-]+([\.]+([\w]+[\.])?)+[a-zA-Z]{2,6}$/i;
if($.trim(a)!="" && !$.trim(a).match(email_filter))
c=false;
return c;
},
check_mail: function(div_id, error) {
return function(){ //**made the change nr. 1**
var email = $(div_id + ' input[name=email]').val();
var check = this.validate_mail(email);
if(check==false && $(div_id).is(':visible'))
{
$(div_id + ' '+ error).html('<b>some error</b>');
} else {
$(div_id + ' ' + error).text('');
}
}
}
}
}();
$(function(){ //**made the change nr. 2**
$('#register input[name=email]').blur(
checking.form.check_mail("#register", ".error_email")
);
}
我需要一些帮助与此有关。我相信我没有正确使用this
元素
任何帮助表示赞赏!
当您返回匿名函数时,this
未引用所有者对象。你可以在某些变量this
值存储在返回函数之前,并使用它,而不是这样的:
...
var that = this;
return function(){
that.validate_mail(...);
}
...
而不是使用
this.validate_mail(email);
使用
checking.form.validate_mail(email);
它应该工作的罚款。
您的案例中不能使用this
,因为您没有创建实例。
checking.form.validate_mail(在你的答案中的小错字) – JohnJohnGa 2012-01-05 21:36:02
在我看来,你的编码方式是升技奇怪的,很容易犯错误,这是也是错误所在。 this
在check_mail函数内的匿名函数内部是不知道的。
我将重写代码,如下,以使其更清晰:
var checking = {
form: {
validate_mail: function(a){
var c=true;
var email_filter = /^[\w.-][email protected][\w.-]+([\.]+([\w]+[\.])?)+[a-zA-Z]{2,6}$/i;
if($.trim(a)!="" && !$.trim(a).match(email_filter))
c=false;
return c;
},
check_mail: function(div_id, error) {
var email = $(div_id + ' input[name=email]').val();
var check = this.validate_mail(email);
if(check==false && $(div_id).is(':visible'))
{
$(div_id + ' '+ error).html('<b>some error</b>');
} else {
$(div_id + ' ' + error).text('');
}
}
}
}
用法:
$('#register input[name=email]').blur(function() {
checking.form.check_mail("#register", ".error_email");
});
函数的调用在这种情况下应该怎么看? – sorin 2012-01-05 21:54:11
因此:'$('#register input [name = email]')。blur(function(){checking.form.check_mail(“#register”,“.error_email”);});' 注意额外匿名功能。 而不是创建返回可用于绑定的函数的函数,而是创建可执行的函数,并从绑定到事件时使用的匿名函数调用它们。 – jeffreydev 2012-01-05 22:09:40
究竟是不是工作? – Stefan 2012-01-05 21:28:10
如果我们甚至不知道代码应该做什么以及想要做什么,我们如何能够帮助您? – 2012-01-05 21:29:06
函数validate_email没有响应,我认为在第二个例子中调用它是错误的 – sorin 2012-01-05 21:31:31