我正在为表单编写代码,因为有很多表单需要简化掩盖表单中字段的方式。因为我创建了一个封装字段ID并为每个字段分配特定交互的类。 / p>
我有代码:
var Mask=(function() {
var me=this;
var eventInterator;
var func;
var fields;
function Mask(fd,ev,fn){
this.setFunction(fd);
this.setFunction(fn);
this.setEvent(ev);
this.execute();
}
Mask.prototype.setFields = function(fd){
fields=fd;
}
Mask.prototype.setFunction= function(fn){
func=fn;
}
Mask.prototype.setEvent= function (ev){
eventInterator=ev;
}
Mask.prototype.execute = function(){
for (var i=0;i<fields.length;i++){
loadEvent(fields[i]);
}
}
function loadEvent(field){
$(me+' '+field).on(eventInterator,function() {
func();
});
}
return Mask;
})();
当我运行以下代码时:
function doSomeThing(){
alert("hi");
}
var fields = ['#field1','#field2','#field3','#field4'];
var mask = new Mask(fields,"keyup",doSomeThing);
我收到错误:语法错误,无法识别的表达式:[对象窗口]
如何为jquery选择器设置javascript类的对象?
答案 0 :(得分:3)
有2个问题
首先this.setFunction(fd);
应为this.setFields(fd);
二
在Mask
函数中,me
引用window
对象,因为它是一个对象me + ' ' + field
将返回[object Window] #field1
,这就是你得到错误的原因
所以将$(me+' '+field)
更改为$(field)
同样正如@plalx所说,你使用局部变量是没用的,因为Mask
的每个实例都会覆盖以前的值