設(shè)計表單頁面字段的自審單
![](http://image.woshipm.com/wp-files/img/62.jpg)
文章分享了作者在制作設(shè)計表單頁面字段的自審單,希望能夠?qū)δ阌兴鶐椭?/p>
一般來說,無論是C端產(chǎn)品還是后臺產(chǎn)品,我們在設(shè)計的時候都不可避免的會接觸到設(shè)計表單頁面的時候。尤其是后臺產(chǎn)品,可以說大部分內(nèi)容的生成都是一個個表單頁面堆疊而成的,所以設(shè)計好一個頁面對于一個后臺產(chǎn)品來說可以說是十分重要的。
然而我們在設(shè)計完之后,信心滿滿的交給開發(fā)時,卻時不時的會讓開發(fā)懟來懟去:“這個字段的限制沒辦法做啊”“這個數(shù)據(jù)量這么大,要不要做分頁啊”…,此種情況,不勝枚舉。
所以為了讓我們心中有底氣,在設(shè)計每一個表單字段的時候,除了一些需求上的問題,即此字段需不需要出現(xiàn),字段名稱及填寫內(nèi)容是什么之外,對于某一個字段的客觀限制,我們也應該有個標準。
這個時候,有一個表單頁面字段的自審單就十分重要。我們在設(shè)計完一個表單頁面之后,按照自審單將自己的頁面重新審視一下,查漏補缺,無論是以后對于開發(fā)的溝通還是產(chǎn)品的完整性都是十分重要的。下面,我想說一說自己設(shè)計表單頁面時候的自審單。
我把表單字段的類型分為了兩種:一、輸入型字段;二、非輸入型字段。當然,有時候我們可能也會遇到既是輸入又是非輸入的字段的時候,如果有此情況,將兩者按照頁面的自身情況合并即可。還有一些情況是輸入型字段與非輸入型字段都會遇到的共性問題,這些都需要我們?nèi)タ紤]。
一、輸入型字段自審單
我認為,在設(shè)計輸入型字段的時候,我們需要考慮的有以下幾個問題:
- 字段數(shù)據(jù)類型限制。
- 字段輸入長度限制。
- 字段輸入格式限制。
- 單行文本輸入框還是多行文本輸入框。
- 輸入項是否有驗重設(shè)置。
- 字段輸入內(nèi)容是否可以通過其他表單字段進行計算。
1.字段的數(shù)據(jù)類型限制
嚴格意義來說,需要考慮這個問題的應該是開發(fā),但是作為產(chǎn)品經(jīng)理的我們?nèi)绻梢栽谝婚_始就把字段的數(shù)據(jù)類型考慮清楚,無論是后面開發(fā)還是我們對整個產(chǎn)品的把控都會更上一個臺階。
字段的數(shù)據(jù)類型基本上可以分為以下幾種:布爾型、字符串、整型、浮點型、數(shù)組、對象等。不同的開發(fā)語言數(shù)據(jù)類型可能會略有差異;同時有些數(shù)據(jù)類型可能也會拆分的更精細一些,比如一些語言浮點型會有單精度和雙精度之分。但是對于我們在設(shè)計表單頁面中的字段時,一般來說只需要了解布爾型,字符串,整型、浮點型即可滿足設(shè)計上的一些需要。
布爾型:值只有兩種:true/false。即是與否。這個一般用于非輸入型字段的填寫。需要選擇某個字段的是否,或者有些開發(fā)在用到只有兩個選項的選擇時也可能會用到。
字符串:字符串可以理解為我們輸入字符的一個集合??梢允亲帜福瑵h字,符號,數(shù)字等。一般來說我們在設(shè)計的時候字符串也是用到最多的時候。從某個意義上來講,輸入型的字段一般都可以通過字符串來存儲。只不過由于存儲所占空間的大小等原因不可以這么操作。
當然,對于不同的數(shù)據(jù)庫來說,不同的輸入長度所采用的字符串類型也不一樣。比如MySQL中的CHAR類型,最多可存儲255個字節(jié),VARCHAR最多可存儲65535個字節(jié),當然,其所占的空間也不同。如果我們可以了解一些數(shù)據(jù)庫中設(shè)計表的知識,肯定會更好。
- 整型:即整數(shù)類型,不同的數(shù)據(jù)庫有對應的整型類型限制其存儲范圍,比如TINYINT和SMALLINT。
- 浮點型:一般來說分為單精度和雙精度。
在了解了以上的一些知識之后,我們就可以根據(jù)字段的具體需求來確定其屬于哪個數(shù)據(jù)類型。從而從容的設(shè)計出表單字段。
2.字段輸入長度的限制(最大最小值)
在我們了解了什么叫做數(shù)據(jù)類型后,接下來要考慮的就是字段長度的限制。其實,這個應該是屬于數(shù)據(jù)類型的一個拓展。因為在你設(shè)計了它的長度后,開發(fā)會根據(jù)其長度選擇選擇一個數(shù)據(jù)類型的類型去進行存儲。所以我們在一開始就將其長度想好無論是對于業(yè)務需求來說還是數(shù)據(jù)庫的表設(shè)計都是十分有益的。
比如我們需要想好這個字符串的長度最長可以輸入多少位;數(shù)字最大可以輸入多少;小數(shù)點后保留幾位小數(shù);時間與日期是從何年何月何日開始的,最大又可以到何年何月何日。
以MySQL為例,不同的數(shù)據(jù)類型的存儲范圍大致為以下情況:
(1)整型
(2)浮點型
(3)日期型
(4)字符串類型
了解數(shù)據(jù)庫的數(shù)據(jù)類型,可以讓我們在設(shè)計字段時大致了解到這個長度可以用什么樣的數(shù)據(jù)類型進行存儲。尤其對于一直閾值的判定等都有很大的用處。
3.字段格式限制
在設(shè)計表單字段時,往往一些對于一些字段的輸入格式有所限制,最典型的為輸入手機號、身份證的格式。這些對于開發(fā)來講一般是用正則表達式進行匹配的。比如可以輸入的特殊符號是什么。首字母必須填寫什么。不可以填寫什么等等。所以我們設(shè)計表單頁面,如有遇到特殊填寫規(guī)則的時最好可以清晰的寫清楚。
當然,如果有能力的話,我們也可以了解一下正則表達式的書寫規(guī)則及原理,知其根本對于我們在設(shè)計時肯定是有好處的。菜鳥教程的正則表達式教程寫的還不錯,在此簡單進行一下推薦。http://www.runoob.com/regexp/regexp-tutorial.html。我們并不需要學的多好,只是簡單了解下,在設(shè)計字段的驗證時帶著目的性去看一下即可。
4、單行文本輸入框還是多行文本輸入框
在前端書寫頁面時,單行文本框即type屬性設(shè)為text的input標簽,多行文本框即textarea。這個對于一些字段規(guī)則來說也是可以提高交互體驗的。比如我們在寫一個信息備注的時候,可能就需要一個多行文本框,而填寫姓名的字段一個單行文本輸入框即可。
5、輸入項是否有驗重設(shè)置
這個設(shè)計一般我們會在注冊一些網(wǎng)站的時候用到,比如當你注冊網(wǎng)站輸入手機號時,會提示你“該手機號已注冊請直接登錄!”,這時就是用到了驗重處理。我們在設(shè)計表單頁面的時候,必須要考慮到的就是這些。一般來說,驗重設(shè)置多見于名稱,手機號,身份證號等進行區(qū)別標識的填寫,我們在設(shè)計這些字段時要注意是否需要驗重。
6、字段輸入內(nèi)容是否可以通過其他表單字段進行計算
有時候,一段字段可以與其他字段計算得出,這個時候,我們就無需讓用戶進行填寫,只需根據(jù)規(guī)則將其自動計算出即可。比如,寫了一個單價,下文有數(shù)量,那么應收用單價*數(shù)量即可。在應收欄目就沒有必要讓其填寫了。
當然,這個例子比較簡單,實際我們在進行設(shè)計的時候,情況會比較復雜,我們往往都拿不準這個是需要計算的還是需要填寫的,或者是誤設(shè)計為填寫字段了。這個時候,就需要設(shè)計者對自己的產(chǎn)品邏輯十分了解,每個字段的意義必須清楚。否則可能出現(xiàn)的就不止是將計算字段設(shè)計為填寫字段的問題了。也有可能出現(xiàn)數(shù)據(jù)錯誤,計算出來的值與用戶填寫的值出現(xiàn)不一致。
二、非輸入型字段自審單
非輸入型字段這里指的是無需用戶自己填寫,通過規(guī)則列出由用戶選擇的字段。有時候,輸入型字段與非輸入型字段會有一些共性的審查項目,比如說數(shù)據(jù)類型以及是否可以通過其他字段計算出來等,但由于非輸入字段更多可控,所以相對來說會有更多的限制,同時所需要考慮的情況也都會在自己的掌控之內(nèi)。非填寫字段這里介紹兩種,一種是選擇項,一種是時間日期選擇器。
設(shè)計選擇項的時候,我們需要考慮的問題有以下幾種:
1、此選擇項的展示形式:下拉框、級聯(lián)下拉框、一級彈窗、多級彈窗
對于設(shè)計選擇項類型的非輸入型字段來說,可以通過其具體業(yè)務大致分為下拉框、級聯(lián)下拉框、一級彈窗、多級彈窗。一級與多級(級聯(lián))的區(qū)別即為是否有層級關(guān)系,這點比較容易理解。所以在我們設(shè)計的時候所需要考慮的是采用下拉框的形式還是采用彈窗的形式。
采用下拉框的形式時每一級的數(shù)據(jù)條目會比較少,以我的經(jīng)驗來說一般不要多于20條,如果再多的時候,不僅交互上并不友好,而且在請求后臺數(shù)據(jù)的時候,返回的也會很慢。
所以這個時候我們就需要采用彈窗的形式,通過分頁來控制其長度了。相當于犧牲了操作的便捷性來進行交互的優(yōu)化,同時也減輕服務器壓力。當然,在設(shè)計的時候我們也可以直接在下拉框上進行分頁請求,這樣的設(shè)計并不少見。最終怎么設(shè)計就看設(shè)計者自己的權(quán)衡了。
2、是否支持搜索選擇項
在設(shè)計選擇項的時候,是否允許搜索又是一個功能點,一般只要數(shù)據(jù)過多不好進行篩選的時候都會用到搜索。這樣我們可以精準的定位到自己所要選擇的項目。設(shè)計搜索時,我們需要考慮的是搜索是精準搜索還是模糊搜索。
當然,更友好的方式肯定是進行模糊搜索,然后通過模糊程度的不斷精細其結(jié)果也越發(fā)精準。但是有時候,我們所需要填寫的項目可能是在知道了此項的具體內(nèi)容后進行填寫的。比如設(shè)計審批單時,選擇審批人的姓名肯定是確定的,這時我們就不妨使用精準搜索來提高檢索速度。
3、選擇項是否可以重復選擇
關(guān)于這一點,我們在設(shè)計的時候也是需要的,比如在電商系統(tǒng)中的報備滿倉預警時,已經(jīng)是滿倉的倉庫(即已經(jīng)被選擇過的)肯定是不可以再繼續(xù)選擇的,這種情況就是不可以重復選擇。是否可以重復選擇這個設(shè)計點在業(yè)務邏輯上感覺還是比較明確的,如果自己業(yè)務理的清楚,可以很清楚地設(shè)計出來。
這里,我要說一個容易被遺忘的設(shè)計點:在設(shè)計已選擇的某個元素不可被其他表單選擇時,在已有條目上再次修改該元素理論上是被占用的狀態(tài),所以從后端邏輯上修改時該元素時不可選狀態(tài),需設(shè)置一個狀態(tài),即修改時,此條需要改動的話所選擇的是當前所選中的條目以及未被選擇的條目。
4、是否與其他字段有聯(lián)動操作
這點設(shè)計其實與下拉框的級聯(lián)類似,當我們在其他字段中選擇了某些固定項時,當前字段可能是與該字段進行關(guān)聯(lián)的。我們只能選擇與該字段相關(guān)聯(lián)的字段。有時候,甚至為角色或者項目聯(lián)動,比如固定的人或者模塊可以看到不同的項目,這些就關(guān)乎權(quán)限設(shè)計的內(nèi)容了,在此不多贅述。
設(shè)計這點時,我們需要考慮的是關(guān)聯(lián)的兩個或者多個字段是雙向聯(lián)動還是單向聯(lián)動。如果是單向聯(lián)動,那么在填寫字段時就需要按照特定的順序去填寫。必須是一級一級的選擇關(guān)聯(lián)項。而雙向聯(lián)動指的是聯(lián)動關(guān)系沒有先后順序,用戶可以任意填寫項目,與之關(guān)聯(lián)的項目只需在用戶選擇完畢后將關(guān)聯(lián)項列出即可。大多數(shù)情況單向聯(lián)動與雙向聯(lián)動都可以用,但是前者更加注重的是邏輯性,而后者注重的是對于用戶的交互友好性。
設(shè)計時間日期選擇器的時候,我們需要考慮的問題有以下幾種:
1、選擇器的精確程度
我們在設(shè)計時間日期選擇器的時候,是需要精確到時分秒還是年月日,這點需要進行考慮,比如電商CMS的搶購點肯定需要精確到秒,而簽訂合同合同期可能只需要精確到日即可。
2、選擇一個時間段還是時間點
這一點應該比較好設(shè)計同時也比較好理解。具體業(yè)務應該也比較清晰,需要唯一一點注意的就是如果我們設(shè)計的是一個時間段。那么通過此字段進行列表篩選的時候,開始時間和結(jié)束日期,需要將其單獨拆開進行一個時間段的范圍篩選。比如填寫合同開始結(jié)束日期是一個時間段。列表篩選時,合同開始日期也是一個時間段;合同結(jié)束日期也是一個時間段。
3、選擇時間有沒有時間限制
關(guān)于這點最常見的就是一般在設(shè)計時我們需要選擇的時候是當前及之后的一個時間還是可以選擇任意時間。另外,比如簽訂合同時同一個合同的開始日期肯定要大于結(jié)束日期。新合同的開始日期必須要在舊合同的結(jié)束日期之后。合同期內(nèi)進行的一系列操作的時間肯定不能超出合同時間等等情況。
這樣設(shè)計可以增強產(chǎn)品的容錯性,讓用戶在操作錯誤的情況下可以及時糾正過來。
可能在設(shè)計一個字段時,我們要考慮的問題不僅僅有這些,其實我覺得我們每個人在設(shè)計表單頁面的時候都需要這樣一個自審單。對照著我們的產(chǎn)品,進行查漏補缺,讓我們的產(chǎn)品變得更加完善。
專欄作家
執(zhí)迷,微信公眾號:執(zhí)迷有悟,人人都是產(chǎn)品經(jīng)理專欄作家。電商O2O領(lǐng)域,關(guān)注數(shù)碼硬件,人工智能,新聞資訊領(lǐng)域。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 unsplash,基于 CC0 協(xié)議
執(zhí)迷你好,請問你說的這句話“這里,我要說一個容易被遺忘的設(shè)計點:在設(shè)計已選擇的某個元素不可被其他表單選擇時,在已有條目上再次修改該元素理論上是被占用的狀態(tài),所以從后端邏輯上修改時該元素時不可選狀態(tài),需設(shè)置一個狀態(tài),即修改時,此條需要改動的話所選擇的是當前所選中的條目以及未被選擇的條目?!蹦茉俳忉屚ㄋ滓稽c嗎?
就比如現(xiàn)在你現(xiàn)在要選擇的選項有A、B、C、D四個項目,D是已經(jīng)被其他條目選擇的。所以此時供你可選的選項有A/B/C。這時你選擇了A之后A的狀態(tài)也就是選擇狀態(tài)了。所以當你進行修改時,A和D一樣,都是不可選狀態(tài),你所能修改時該選項只能選B和C。但是如果你不修改此字段修改其他字段。理論上說是無法保存的。因為你選擇了一個不可選的選項。這樣可以明白么~
嘿嘿明白了!謝謝您執(zhí)迷