官术网_书友最值得收藏!

2.7 表單

在本章的開頭部分,我們講到一個表單由三部分組成,即表單標簽、表單域、表單按鈕,并且學習了EasyUI表單域中的部分控件以及各類按鈕的使用方法。在前面的章節中,我們介紹的各類控件大都是用來處理用戶的各類操作,其僅僅屬于客戶端的操作,而一個網站更需要服務器端來處理客戶端的各種操作,表單就是客戶端與服務器端之間交互的一個中介,通過表單我們可以將各類控件的值傳輸到服務器端。本節將先介紹表單的使用方法,隨后將向讀者演示一些實用的程序。

2.7.1 表單的基本使用方法

本節將先帶領讀者學習表單的基本使用方法,接著會通過幾個例子進一步講解表單的使用。

表單的默認配置定義在$.fn.form.defaults中。

1. 創建表單

表單只能通過標記來創建:

01  <form id="ff">
02      ...表單域內的各類控件以及表單按鈕
03   </form>

2. 表單屬性

表單常用屬性說明見表2.52。

表2.52 表單常用屬性

3. 表單事件

表單常用事件說明見表2.53。

表2.53 表單常用事件說明

4. 表單方法

表單常用方法說明見表2.54。

表2.54 表單常用方法說明

2.7.2 提交表單

通常我們會在控件的標記內定義一個name屬性,在向服務器提交數據時,服務器可以通過該屬性的值來獲取數據,例如:

01  <form id="ff" method="post">
02           <div id="nb" name="nb"></div>
03           <a id="btn" href="#" class="easyui-linkbutton">提交</a>
04  </form>
05  <script>
06      $(function(){
07           $('#nb').numberbox({
08                prefix:'$',
09           });
10           $('#ff').form({
11                url:"form.php",
12                onSubmit: function(){
13                    //提交前觸發的事件
14                },
15                success:function(data){
16                    //服務器返回數據后觸發
17                }
18           });
19           $("#btn").click(function(){
20                $('#ff').submit();
21           });
22      });
23  </script>

相關的服務器代碼如下:

01  <?php
02       //獲取前端數據
03       $name = $_POST["nb"];
04       //注意$name的值是存儲值
05  ?>

提示

服務器接收的存儲值,本例中如果用戶輸入數字1時數字框會顯示$1,但是提交到服務器的則是存儲值1。

我們也可以使用表單的submit方法動態提交表單,例如上述代碼等同于:

01  <form id="ff" method="post">
02           <div id="nb" name="nb"></div>
03           <a id="btn" href="#" class="easyui-linkbutton">提交</a>
04  </form>
05  <script>
06       $(function(){
07                $('#nb').numberbox({
08                     prefix:'$',
09                });
10           $("#btn").click(function(){
11                $('#ff').form('submit',{
12                     url:"form.php",
13                     onSubmit: function(){
14                          //提交前觸發的事件
15                     },
16                     success:function(data){
17                          //服務器返回數據后觸發
18                          alert(data);
19                     }
20                });
21           });
22       });
23  </script>

在提交表單的過程中,可以使用queryParams屬性添加一些額外的參數,例如:

queryParams:{param1:'1',param2:'2'},

服務器端獲取這些參數的方法如下:

$param1 = $_POST["param1"];

在提交表單前通常需要檢查組件中的輸入值是否通過驗證,此時只需在onSubmit事件中使用validate方法進行檢查即可,該方法會自動掃描表單內的全部組件,只有所有組件都驗證通過時它才會返回true。例如:

01  onSubmit: function(){
02                if($('#ff').form('validate')){
03                     alert('通過驗證');
04                     return true;
05                }
06                else{
07                     alert('未通過驗證');
08                     return false;
09                }
10  }

2.7.3 初始化表單字段

在實際開發中經常會遇到對某些信息進行編輯的情況,例如編輯某人的個人信息等,此時需要先從服務器將用戶數據取出并初始化指定的組件,EasyUI表單提供了數據加載功能,它可以方便地幫助我們完成數據的初始化功能,它支持本地加載數據和從服務器加載數據兩種方式。下面先向讀者展示如何加載本地數據,相關代碼如下:

01  <form id="ff" method="post">
02           <input id="nickname" name="nickname"><br/><br/>
03           <input id="age" name="age"><br/><br/>
04           <input id="birthday" name='birthday'>
05  </form>
06  <script>
07       $(function(){
08           $('#nickname').textbox({
09                label:"姓名",
10                labelWidth:150,
11                width:350
12           });
13           $('#age').numberspinner({
14                label:"年齡",
15                labelWidth:150,
16                width:350
17           });
18           $('#birthday').datebox({
19                label:"出生日期",
20                labelWidth:150,
21                width:350
22           });
23           $("#ff").form('load',{
24                nickname:'張三',
25                age:'18',
26                birthday:'7/3/2000'
27           })
28       });
29  </script>

使用表單的load方法可以加載本地數據,可以發現在它的參數中仍然是使用字段的name屬性進行賦值。最終運行結果如圖2.26所示。

圖2.26 使用本地數據初始化表單

同樣可以使用load方法加載服務器端數據來初始化表單,例如:

$("#ff").form('load','initData.php');

其中服務器端代碼如下:

01  $data = array('nickname'=>'zhangsan',
02             'age'=>'18',
03             'birthday'=>'7/3/2000'
04           );
05  echo json_encode($data);

服務器端的數據結構與本地加載時一致,也是通過字段的name屬性來賦值。

2.7.4 文件上傳

本節將講解如何利用表單上傳文件,先看一個例子:

01            <form id="ff" method="post">
02                <!-- 只接受pdf類型文件 -->
03                <input class="easyui-filebox" name='file' style="width:300px"
04                 data-options="accept:'application/pdf'" ><br/><br/>
05                <div id="p" class="easyui-progressbar"
style="width:300px;"></div><br/><br/>
06                <a id="btn" href="#" class="easyui-linkbutton">上傳文件</a>
07            </form>
08            <script>
09                $(function(){
10                     $("#ff").form({
11                          iframe:false,
12                          onProgress:function(percent){
13                               $("#p").progressbar("setValue",percent);
14                          }
15                     });
16                     $("#btn").click(function(){
17                          $('#ff').form('submit',{
18                               url:"server/upload.php",
19                          });
20                     });
21                });
22            </script>

這個例子里面我們使用了表單的onProgress事件,該事件返回文件上傳過程中的進度,使用該事件先要設置表單的iframe屬性為false。我們使用了一個進度條組件(progressbar),該組件將會動態顯示文件上傳的進度。

提示

讀者也可以使用$.messager.progress()方法顯示默認的進度條、使用$.messager.progress('close')方法關閉默認進度條。不同的是默認進度條并不會根據表單處理的進度實時更新,它會循環地更新進度直到被關閉為止。

服務器端同樣是使用文件框的name來獲取上傳的文件,其代碼如下:

01  // 文件的保存目錄,默認文件會被保存到D盤根目錄下
02  $path = "D://";
03  if (file_exists($path . $_FILES["file"]["name"])) {
04      echo $_FILES["file"]["name"] . " 已存在. ";
05  } else {
06      move_uploaded_file($_FILES["file"]["tmp_name"], $path .
$_FILES["file"]["name"]);
07  }

最終運行結果如圖2.27所示。

圖2.27 文件上傳演示

【本節詳細代碼參見隨書源碼:\源碼\easyui\example\c2\uploadFile.html】

提示

本書僅僅是簡單地向讀者演示服務器端的相關代碼,由于服務器端開發語言較多且相關框架眾多,為減輕讀者的學習成本,在本書中將不重點介紹服務器端的相關代碼。讀者在學習服務器端代碼時只需關注兩點即可:(1)服務器端如何獲取數據;(2)服務器端如何返回數據。在本節中服務器端主要是通過標記的name屬性獲取數據,返回的是一個JSON格式數據。

主站蜘蛛池模板: 保靖县| 禄劝| 云和县| 于都县| 禹城市| 绥芬河市| 泽库县| 剑阁县| 湟中县| 光山县| 久治县| 乌兰浩特市| 秭归县| 武威市| 禄劝| 茶陵县| 固始县| 广汉市| 昭觉县| 绥芬河市| 开阳县| 泰州市| 广汉市| 灵宝市| 阿克| 富锦市| 丘北县| 固镇县| 揭东县| 陇西县| 剑阁县| 兴业县| 南安市| 鄂伦春自治旗| 舟山市| 阳原县| 家居| 株洲县| 即墨市| 平昌县| 板桥市|