2015-09-09 128 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/ –