【Jquery】自製Plugin

  • 2477
  • 0
  • 2011-05-12

摘要:【Jquery】自製Plugin

這篇主要講的是如何自己製作Jquery的Plugin

這篇算是融合這篇和黑暗前輩經典的邊學邊做系列,小弟資質不好,只能邊寫邊try,也順便記錄一下學習的過程與心得之前半吊子的學會了用AJAX和Page Method溝通,這次持續用這個技巧來做範例,只是這次想做的是,從資料庫讀取出個人的基本資料,並且將他自動顯示在對應的txtbox上,而不用一個一個的在把值加上去

首先一樣是.cs的Page Method部分

        [System.Web.Services.WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public static Student getdata(int Id)        
        {
            //取資料庫資料出來
            //放到DataTable裡去

            Student s = new Student();
            //將DataTable裡的資料塞到名為s的Student物件
            s.name = Dt.Rows[0]["name"].ToString();
            s.phone = Dt.Rows[0]["phone"].ToString();
            s.age = Convert.ToInt32(Dt.Rows[0]["age"]);
            return s;
        }

        public class Student
        {
            public string name { set; get; }
            public string phone { set; get; }
            public int age { set; get; }
        }

接著是HTML部分有一個ID為ddlId的下拉選單,還有一個ID為txtname的textbox,並且包在名為abc的DIV區塊裡,注意命名是txtXXXXX是因為方便可以自動放入對應的textbox裡,想要自動化,就必須在先前下一點工才行

接著是重頭戲javascript部分

$(function() {
            (function($) {
                $.fn.extend({
                    myadd: function(obj) {
                        if (!obj) return;
                        var content = this;
                        content.find(":text,textarea").each(function() {
                            var txt = $(this);
                            var id = txt.attr('id');
                            if (!id || id.length < 4) return;
                            id = id.substr(3);
                            if (obj[id] && obj[id]) {                                
                                txt.val(obj[id]);
                            }
                        });
                    }
                });
            })(jQuery);
            $("#ddlId").change(function() {
                var Id = $("#ddlId option:selected").val();
                $.ajax({
                    url: "select.aspx/getdata",
                    type: "POST",
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    //這邊要載入Jquery JSON套件才可以用
                    data: $.toJSON({ Id: Id }),
                    success: function(msg) {
                        //檢查#abc裡的區塊是不是有對應的名稱,有就給值
                        $("#abc").myadd(msg.d);
                    }
                });
            });
        });

在呼叫Page Method後,成功會回傳到msg,從中斷點看msg長這樣

Object { __type="jquery.Student", name="阿里", more...}

但其實外面還有用一層d給包圍,所以在傳給自製的Plugin時,要用msg.d才會把真正的物件傳過去,接著我寫了一個名為myadd的函數,裡面最主要就是蒐尋#abc底下所有textbox,並且取他的ID出來,例如我之前命名的txtname,接著去除txt然後取name,再將name拿去obj[id]裡面尋找有沒有此屬性,有的話就將此obj的屬性給予textbox,這樣不管使用者的欄位或是表格再怎麼多再怎麼長,都不用在一個一個key上去了!

當然如果各位有不一樣的想法與意見,歡迎一起討論!