form表單接收<switch> <input> <checkbox> <slider> <radio> <picker>提交的值,數據接收格式為{'name': 'value'},但是在接收picker的時候遇到了大坑,而且搜索了一下,使用uniapp的小夥伴都遇到了這個坑,所以將我的解決方案分享出來,僅作參考。
問題原因:
官方文檔裡,picker默認不帶name,為了能夠給form提交,所以給picker添加name屬性,攜帶 form 中的數據觸發 submit 事件,event.detail = {value : {'name': 'value'} },當觸發submit事件時,會提交name和value,在正常情況下,value值為name對應的數據,但在picker組件中,value 的值表示選擇了 range 中的第幾個(下標從 0 開始),這就導致value值為數組索引的數字,而不是對應的選項值。
解決後對比:
解決方案:
看了網上很多方案特別複雜,對於新手來說不怎麼友好,所以我想了一個偏門但操作簡單的方法。在picker組件下添加一個能夠被form接收值的input,然後給input設置name和value屬性,name為本來想給picker設置的name,比如size,city,country等,value則和當前選定的數組的值綁定,最後給input設置display為隱藏(關鍵步驟),picker不要設置name屬性,否則會使form提交的數據出現null值,不怎麼好看。附上實例代碼:
// template部分<form @submit="formSubmit" @reset="formReset"> <view>尺寸選擇</view> <view> <view> <text>您選擇的尺寸</text>// 添加一個input,設置name和value,value動態綁定值array[index],並將display設置為none <input name="size" style="display: none;" :value="array[index]" /> <view> <picker @change="bindPickerChange" :value="index" :range="array"> <view>{{array[index]}}</view> </picker> </view> </view> </view> </form>