2012-09-26 48 views
0

假設我有一個網頁表單,用於收集用戶的公司名稱及其地址信息。在相關的JavaScript文件,以減少分散在功能jQuery選擇並在單個對象結構,收集相關信息,我可以存儲所有在一個對象就像在這個簡單的例子:對象中的jQuery選擇器 - 減少冗餘與可讀性

var companyForm = { 
    name: { 
     inputField: $("#CompanyName"), 
     isValid: function() { 
      return IsNameValid(this.inputField.val()); 
     }, 
     labelField: $("#CompanyNameLabel") 
    }, 
    address: { 
     inputField: $("#Address"), 
     isValid: function() { 
      return IsAddressValid(this.inputField.val()); 
     }, 
     labelField: $("#AddressLabel") 
    }, 
    city: { 
     inputField: $("#City"), 
     isValid: function() { 
      return IsCityValid(this.inputField.val()); 
     }, 
     labelField: $("#CityLabel") 
    } 
}; 

我只需要列出這些選擇一次,然後每當我需要引用的公司名稱,用戶輸入的,我可以用這個:

companyForm.name.inputField.val() 

或者,如果我要檢查用戶輸入的有效性:

companyForm.name.isValid() 

等(如果用戶輸入格式不正確的輸入並且我想強調他們需要他們的注意,那麼labelField可能是一個標籤元素,我可能想要添加名爲「error」的類) 。

我的困境是,通過應用DRY原則,以我的jQuery選擇,我現在傷害可讀性,因爲:

$("#CompanyName").val() 

是一個更容易閱讀和理解比:

companyForm.name.inputField.val() 

我不應該試圖通過這種方式來減少冗餘嗎?有沒有更好的方法可以管理或最小化選擇器引用?

回答

2

如何實現getter和setter函數?這樣你只叫companyForm.getName()得到的companyForm.name.inputField.val()

值比方說:

var companyForm = { 
    name: { 
     inputField: $("#CompanyName"), 
     isValid: function() { 
      return IsNameValid(this.inputField.val()); 
     }, 
     labelField: $("#CompanyNameLabel") 
    }, 
    ... 
    getName: function() { 
     return this.name.inputField.val(); 
    } 
}; 
+0

如此簡單,我完全忽略它的解決方案!如果我需要訪問鏈接到底層HTML輸入元素的其他各種jQuery屬性和函數,我仍然可以使用更長的語法引用它們。謝謝! – Derek