2015-09-09 89 views
0

我做的窗体代码,因为有很多的形式需要简化掩盖领域的forms.For我做了封装领域的ID,并指定具体类的方式每个人的互动。的JavaScript对象jQuery选择

我有代码:

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类的对象?

+1

什么线是错误的? ''到this.setFields(FD); – atmd

+3

当你纠正'this.setFunction(FD),会发生什么'? –

+1

不相关的问题,但我没有看到你的'Mask'抽象是如何有用VS'$( '#字段1,#字段2,#字段3,#字段4')KEYUP(DoSomething的);'或'$(场.join(','))。keyup(doSomeThing)'如果选择器必须是动态的。 – plalx

回答

3

有2个问题

首先this.setFunction(fd);应该this.setFields(fd);


在你Mask功能,mewindow对象,因为它是一个对象me + ' ' + field将返回[object Window] #field1,这就是为什么你正在出现错误。

因此改变$(me+' '+field)$(field)


另外,作为@plalx说,你的局部变量的使用是无用为Mask每个实例将覆盖以前的值

+1

通过代码有超过2个问题。整个模块没有任何意义。所有私有模块变量将在实例间共享。 – plalx

+0

@plalx是......你是对的 –

+0

http://jsfiddle.net/arunpjohny/2gLf52mm/ –