ui-js-components-form.md 5.4 KB
Newer Older
H
HelloCrease 已提交
1
# form开发指导
Z
zengyawen 已提交
2

H
HelloCrease 已提交
3
form是一个表单容器,支持容器内[Input](../reference/arkui-js/js-components-basic-input.md)组件内容的提交和重置。具体用法请参考[form API](../reference/arkui-js/js-components-container-form.md)
Z
zengyawen 已提交
4 5


H
HelloCrease 已提交
6
> **说明:**
Z
zengyawen 已提交
7 8 9
> 从 API Version 6 开始支持。


H
HelloCrease 已提交
10
## 创建form组件
Z
zengyawen 已提交
11

H
HelloCrease 已提交
12 13
在pages/index目录下的hml文件中创建一个form组件。
```html
Z
zengyawen 已提交
14 15
<!-- xxx.hml -->
<div class="container">
W
wangshuainan1 已提交
16 17
  <form style="width: 100%; height: 20%">  
    <input type="text" style="width:80%"></input>
Z
zengyawen 已提交
18 19 20 21
  </form>
</div>
```

H
HelloCrease 已提交
22
```css
Z
zengyawen 已提交
23 24
/* xxx.css */
.container {
W
wangshuainan1 已提交
25 26
  width:100%;
  height:100%;
Z
zengyawen 已提交
27 28 29 30 31 32 33 34 35 36 37 38
  flex-direction: column;
  justify-content: center;
  align-items: center;
  background-color: #F1F3F5;
}
```

![zh-cn_image_0000001211069339](figures/zh-cn_image_0000001211069339.png)


## 实现表单缩放

H
HelloCrease 已提交
39 40
为form组件添加click-effect属性,实现点击表单后的缩放效果,click-effect枚举值请参考[通用属性](../reference/arkui-js/js-components-common-attributes.md)
```html
Z
zengyawen 已提交
41 42 43 44 45 46 47 48 49
<!-- xxx.hml -->
<div class="container">
  <form  id="formId" class="formClass" click-effect="spring-large">
    <input type="text"></input>  
  </form>
</div>
```


H
HelloCrease 已提交
50
## 设置form样式
Z
zengyawen 已提交
51 52


H
HelloCrease 已提交
53
通过为form添加background-color和border属性,来设置表单的背景颜色和边框。
Z
zengyawen 已提交
54 55


H
HelloCrease 已提交
56
```css
Z
zengyawen 已提交
57 58
/* xxx.css */
.container {
W
wangshuainan 已提交
59 60
  width: 100%;
  height: 100%;
Z
zengyawen 已提交
61 62 63 64 65 66
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background-color: #F1F3F5;
}
.formClass{
W
wangshuainan 已提交
67 68 69 70
  width: 80%;
  height: 100px;
  padding: 10px;
  border: 1px solid #cccccc;
Z
zengyawen 已提交
71 72 73 74 75 76 77 78 79
}
```


![zh-cn_image_0000001208771113](figures/zh-cn_image_0000001208771113.gif)


## 添加响应事件

H
HelloCrease 已提交
80
为form组件添加submit和reset事件,来提交表单内容或重置表单选项。
W
wangshuainan1 已提交
81

H
HelloCrease 已提交
82
```html
Z
zengyawen 已提交
83
<!-- xxx.hml -->
W
wangshuainan1 已提交
84 85 86 87 88 89 90 91
<div class="container">
  <form onsubmit='onSubmit' onreset='onReset' class="form">
    <div style="width: 100%;justify-content: center;">
      <label>Option 1</label>
      <input type='radio' name='radioGroup' value='radio1'></input>
      <label>Option 2</label>
      <input type='radio' name='radioGroup' value='radio2'></input>
    </div>
W
wangshuainan 已提交
92 93
    <div style="width: 100%;justify-content: center; margin-top: 20px">
      <input type="submit" value="Submit" style="width:120px; margin-right:20px;" >   
W
wangshuainan1 已提交
94
      </input>
W
wangshuainan 已提交
95
      <input type="reset" value="Reset" style="width:120px;"></input>
W
wangshuainan1 已提交
96
    </div>
Z
zengyawen 已提交
97 98 99 100
  </form>
</div>
```

H
HelloCrease 已提交
101
```css
W
wangshuainan1 已提交
102 103 104 105 106
/* index.css */
.container{
  width: 100%;
  height: 100%;
  flex-direction: column;
W
wangshuainan 已提交
107
  justify-items: center;
W
wangshuainan1 已提交
108 109 110 111 112 113
  align-items: center;
  background-color: #F1F3F5;
}
.form{
  width: 100%;
  height: 30%;
W
wangshuainan 已提交
114
  margin-top: 40%;
W
wangshuainan1 已提交
115
  flex-direction: column;
W
wangshuainan 已提交
116
  justify-items: center;
W
wangshuainan1 已提交
117 118 119 120
  align-items: center;
}
```

H
HelloCrease 已提交
121 122
```js
// xxx.js
Z
zengyawen 已提交
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
import prompt from '@system.prompt';
export default{
  onSubmit(result) {
    prompt.showToast({
      message: result.value.radioGroup
    })
  },
  onReset() {
    prompt.showToast({
      message: 'Reset All'
    })
  }
}
```


Z
zengyawen 已提交
139
![zh-cn_image_0000001234329539](figures/zh-cn_image_0000001234329539.gif)
Z
zengyawen 已提交
140 141 142 143 144 145


## 场景示例

在本场景中,开发者可以选择相应选项并提交或重置数据。

H
HelloCrease 已提交
146
创建[Input](../reference/arkui-js/js-components-basic-input.md)组件,分别设置type属性为checkbox(多选框)和radio(单选框),再使用form组件的onsubmit和onreset事件实现表单数据的提交与重置。
Z
zengyawen 已提交
147

H
HelloCrease 已提交
148
```html
Z
zengyawen 已提交
149 150 151 152
<!-- xxx.hml -->
<div class="container">
   <form onsubmit="formSubmit" onreset="formReset">
 <text style="font-size: 30px; margin-bottom: 20px; margin-top: 100px;">
H
HelloCrease 已提交
153
      <span > form </span>
Z
zengyawen 已提交
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
  </text>
    <div style="flex-direction: column;width: 90%;padding: 30px 0px;">
     <text class="txt">Select 1 or more options</text>
      <div style="width: 90%;height: 150px;align-items: center;justify-content: space-around;">
        <label target="checkbox1">Option 1</label>
        <input id="checkbox1" type="checkbox" name="checkbox1"></input>
        <label target="checkbox2">Option 2</label>
        <input id="checkbox2" type="checkbox" name="checkbox2"></input>
       </div>
       <divider style="margin: 20px 0px;color: pink;height: 5px;"></divider>
       <text class="txt">Select 1 option</text>
       <div style="width: 90%;height: 150px;align-items: center;justify-content: space-around;">
         <label target="radio1">Option 1</label>
         <input id="radio1" type="radio" name="myradio"></input>
         <label target="radio2">Option 2</label>
         <input id="radio2" type="radio" name="myradio"></input>
       </div>
       <divider style="margin: 20px 0px;color: pink;height: 5px;"></divider>
       <text class="txt">Text box</text>
       <input type="text" placeholder="Enter content." style="margin-top: 50px;"></input>
       <div style="width: 90%;align-items: center;justify-content: space-between;margin: 40px;">
         <input type="submit">Submit</input>
         <input type="reset">Reset</input>
       </div>
    </div>
  </form>
</div>
```

H
HelloCrease 已提交
183
```css
Z
zengyawen 已提交
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199
/* index.css */
.container {
  flex-direction:column;
  align-items:center;
  background-color:#F1F3F5;
}
.txt {
  font-size:33px;
  font-weight:bold;
  color:darkgray;
}
label{
  font-size: 20px;
}
```

H
HelloCrease 已提交
200 201
```js
// xxx.js
Z
zengyawen 已提交
202 203 204 205
import prompt from '@system.prompt';
export default {
  formSubmit() {
    prompt.showToast({
206
      message: 'Submitted.'
Z
zengyawen 已提交
207 208 209 210 211 212 213 214 215 216
    })
  },
  formReset() {
    prompt.showToast({
      message: 'Reset.'
    })
  }
}
```

Z
zengyawen 已提交
217
![zh-cn_image_0000001234289465](figures/zh-cn_image_0000001234289465.gif)