知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷(xiāo)的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷(xiāo)工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
您當(dāng)前位置>首頁(yè) » 新聞資訊 » 小程序相關(guān) >
微信小程序-如何獲取用戶表單控件中的值
發(fā)表時(shí)間:2021-1-5
發(fā)布人:葵宇科技
瀏覽次數(shù):141
背景
在小程序開(kāi)發(fā)中,經(jīng)常有用到表單,我們往往需要在小程序端獲取用戶表單輸入框中的值(通常用戶輸入的有:switch
,input
,checkbox
,slider
,radio
,picker
)等,通過(guò)觸發(fā)事件,然后提交給后端處理
那么在小程序當(dāng)中有哪些方式可以獲取到表單中的值呢,又怎么通過(guò)非表單提交的方式獲取用戶輸入框中的值呢
換言之,若提交按鈕在form
之外,又如何實(shí)現(xiàn)表單的提交呢
在小程序中有兩種方式可以獲取表單的值
form 表單獲取表單組件的值
這是最普遍通用的一種方法,所有用戶輸入的組件放置在form
內(nèi),當(dāng)點(diǎn)擊form
表單中form-type
為submit
的button
組件時(shí)
它會(huì)將表單組件中的value
值進(jìn)行提交,但此時(shí)需要在表單組件中加上name
來(lái)作為key
如下 UI 所示:
以下是wxss
代碼
/* pages/getformdata/getformdata.wxss */
.container {
padding: 15rpx 40rpx;
}
.title {
margin: 20rpx 0;
}
label {
margin-right: 50rpx;
}
.input {
border-bottom: 1px solid #abcdef;
}
.submitBtn {
margin-top: 40rpx;
}
button:not([size='mini']) {
width: 100% !important;
}
復(fù)制代碼
在上面的示例代碼中,你會(huì)發(fā)現(xiàn)當(dāng)有多個(gè)radio
,多個(gè)checkbox
時(shí),它會(huì)被包裹在radio-group
,checkbox-group
中,不然是無(wú)法獲取到控件中的具體數(shù)值的,當(dāng)然也不是說(shuō)非得包裹,那只能使用第二種方法獲取控件中的值
其中表單中的switch
,radio
,checkbox
中的checked
并不是必須的,可以填寫(xiě)一個(gè)默認(rèn)初始值,進(jìn)行控制,在本文示例中,我是給了一個(gè)初始值
在form
表單中綁定了bindsubmit事件方法,它會(huì)攜帶form
中的數(shù)據(jù)觸發(fā)submit
事件
同時(shí)form
表單內(nèi)的button
按鈕中的formType
綁定了submit
事件,它是用于form
表單組件提交的,會(huì)觸發(fā)form
組件的submit
(提交表單)/reset
(重置表單)事件
下面來(lái)看看邏輯代碼:
// pages/getformdata/getformdata.js
Page({
/**
* 頁(yè)面的初始數(shù)據(jù)
*/
data: {
inputVal: '123',
},
/**
* 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面加載
*/
onLoad: function(options) {},
// 表單提交
formSubmit(event) {
console.log(event); // event.detail.value就可以拿到具體表單中的值
const {
switchChecked,
radio,
checkbox,
slider,
input,
} = event.detail.value; // 解構(gòu)
console.log(switchChecked, radio, checkbox, slider, input); // true "boy" ["itclanCoder"] 50 "123"
},
});
復(fù)制代碼
以上通過(guò)form
表單,獲取表單中控件的值,是通過(guò)在switch
,radio-group
,checkbox-group
,slider
,input
組件中添加name
屬性,從而通過(guò)button
中的formType
結(jié)合form
的bindsubmit
事件,就可以統(tǒng)一的拿到表單組件中的值
優(yōu)點(diǎn): 傳統(tǒng)的表單提交方式,通過(guò)在表單控件內(nèi)設(shè)置name
的值,在表單統(tǒng)一提交時(shí),就可以通過(guò)event.detail.value
拿到表單中各個(gè)表單組件的值,代碼量少,簡(jiǎn)單
缺點(diǎn): 處于form
表單之外的其他表單控件值是無(wú)法拿到的,button
按鈕頁(yè)必須要在form
內(nèi),并且寫(xiě)法固定
下面介紹一種非表單提交方式,也就是不依賴form
,同樣也可以獲取到表單組件的各個(gè)數(shù)值
這種應(yīng)用場(chǎng)景在小程序中是很常見(jiàn)的,表單提交數(shù)據(jù),不一定就非得是button
按鈕的方式,只要能拿到表單組件中的值,就達(dá)到目的了的
非表單方式獲取表單組件的值
下面是實(shí)例效果
以下是實(shí)例代碼,代碼與上面類(lèi)似,只是稍微更改了一下
去除了表單form,name
屬性,在表單組件中新增了bindchange
方法
當(dāng)在switch
,radio-group
,checkbox-group
,slider
,input
中添加了bindchange
方法,checked
,input
發(fā)生改變時(shí)就會(huì)觸發(fā) change
事件,然后通過(guò)攜帶事件對(duì)象,拿到表單組件對(duì)應(yīng)的具體數(shù)值
如下代碼所示
// pages/getformdata/getformdata.js
Page({
/**
* 頁(yè)面的初始數(shù)據(jù)
*/
data: {
switchVal: true, // switch默認(rèn)初始化值
radioVal: 'boy', // radio初始化值,有時(shí)候男女,也可以用1,0等表示男,女的
checkboxVal: 'itclanCoder', // checkbox初始化值
sliderVal: 30,
inputVal: '123', // 輸入框初始化值
},
/**
* 生命周期函數(shù)--監(jiān)聽(tīng)頁(yè)面加載
*/
onLoad: function(options) {},
// switch中的值
handleSwitch(event) {
console.log(event);
const switchVal = event.detail.value;
this.setData({
// 通過(guò)setData更改數(shù)據(jù)
switchVal,
});
},
// 觸發(fā)readio
handleRadio(event) {
console.log(event);
const radio = event.detail.value;
this.setData({
radioVal: radio,
});
},
// 觸發(fā)checkbox
handleCheckBox(event) {
console.log(event);
const checkbox = event.detail.value;
this.setData({
checkboxVal: checkbox,
});
},
// 觸發(fā)slideChange
handleSlideChange(event) {
console.log(event);
const sliderVal = event.detail.value;
this.setData({
sliderVal: sliderVal,
});
},
// input輸入框的值
handleInputChange(event) {
console.log(event);
const inputVal = event.detail.value;
this.setData({
inputVal: inputVal,
});
},
// 表單提交
handleSubmit() {
console.log(
this.data.switchVal,
this.data.radioVal,
this.data.checkboxVal,
this.data.sliderVal,
this.data.inputVal
); // true "boy" "itclanCoder" 30 "123"
},
});
復(fù)制代碼
以上就是通過(guò)非表單提交的方式獲取表單組件中的值,此方法不局限于form
表單,比較靈活,先初始化表單,然后給表單組件綁定bindchange
事件,當(dāng)表單組件checked
,或input
發(fā)生改變時(shí),就會(huì)觸發(fā)change
事件,然后通過(guò)事件對(duì)象就可以拿到表單組件的值
在bindchange
事件的方法內(nèi),重新setData
一次數(shù)據(jù)就可以了的
優(yōu)點(diǎn):非表單form,button組合方式方式提交數(shù)據(jù),比較靈活(在表單form
之外也能提交數(shù)據(jù))
缺點(diǎn): 需要添加綁定bindchange
事件,需要觸發(fā)setData
,但頻繁的觸發(fā)setData
是比較消耗性能,在表單組件不是很多的情況下,可以選用此方式的
這個(gè)是有應(yīng)用場(chǎng)景的,比如:如下小程序中我的頁(yè)面中,的就是用非表單方式提交數(shù)據(jù)的
注意
傳統(tǒng)form
提交數(shù)據(jù)時(shí),必須要設(shè)置name
來(lái)作為key
,否則就拿不到表單組件中的值,而非form
表單形式提交數(shù)據(jù),需要給表單組件綁定bindchang
,通過(guò)事件對(duì)象的方式獲取組件中的數(shù)據(jù)
這個(gè)是有應(yīng)用場(chǎng)景的,比如:如下小程序中我的頁(yè)面中,的就是用非表單方式提交數(shù)據(jù)的
總結(jié)
全文總結(jié)兩段話就是:
- 小程序中獲取表單組件的值有兩種方式,一種是通過(guò)傳統(tǒng)的form結(jié)合button組合的方式,這種方式有局限性,所有的表單組件都需要在form內(nèi),通過(guò)在表單組件內(nèi)設(shè)置name值的方式獲取表單組件中的值(必須要設(shè)置,否則拿到表單組件的值就是undefined)
- 非表單
form
提交數(shù)據(jù)的方式是通過(guò)在表單組件上綁定bindchange事件,通過(guò)事件對(duì)象的方式,獲取event.detail.value
的方式即可拿到,但同樣犧牲性能為代價(jià),需要觸發(fā)setData,從而在最終提交表單時(shí),拿到具體的表單數(shù)值
作者:itclanCoder
來(lái)源:掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
相關(guān)案例查看更多
相關(guān)閱讀
- 云南網(wǎng)站建設(shè)公司哪家好
- 云南小程序開(kāi)發(fā)費(fèi)用
- 百度小程序
- 昆明小程序定制開(kāi)發(fā)
- 搜索引擎自然排名
- 云南網(wǎng)站制作
- 開(kāi)發(fā)框架
- 海報(bào)插件
- 網(wǎng)站小程序
- 網(wǎng)站建設(shè)靠譜公司
- 云南網(wǎng)站建設(shè)
- 昆明小程序開(kāi)發(fā)
- 云南小程序開(kāi)發(fā)公司推薦
- 網(wǎng)站建設(shè)首選
- 小程序開(kāi)發(fā)
- 網(wǎng)站開(kāi)發(fā)
- 網(wǎng)站開(kāi)發(fā)哪家好
- 網(wǎng)站建設(shè)服務(wù)公司
- 云南小程序開(kāi)發(fā)制作
- 云南網(wǎng)站建設(shè)百度
- 云南小程序開(kāi)發(fā)
- 昆明軟件定制
- web前端
- 報(bào)廢車(chē)管理
- 報(bào)廢車(chē)拆解管理系統(tǒng)
- 軟件定制公司
- 網(wǎng)站建設(shè)需要多少錢(qián)
- 網(wǎng)站建設(shè)公司地址
- 大理網(wǎng)站建設(shè)公司
- 麗江小程序開(kāi)發(fā)