1. 程式人生 > >jQuery插件:Ajax將Json數據自動綁定到Form表單

jQuery插件:Ajax將Json數據自動綁定到Form表單

觸發事件 表單 form表單 col switch 常用語 tex 類型 parse

jQuery註冊方法的兩種常用方式:

//jQuery靜態方法註冊
//調用方法$.a1()
$.extend({
    a1: function () {
        console.log("a1");
    }
})
//jQuery插件方法註冊
//調用方法$("#col").b1()
$.fn.extend({
    b1: function () {
        console.log("b1");
    }
})

將ajax返回的數據自動綁定到form表單中的插件,常用語修改等業務,源碼如下:

/*
flagName:標識綁定字段元素的屬性,如data-bind是尋找綁定字段的屬性:<input data-bind=‘Time‘ type=‘text‘ />
jsonData:json數據對象,根據其中的屬性名,綁定到對應屬性名的字段上
*/ var JsonBind = function (ele, opt) { this.$element = $(ele), this.defaults = { flagName: ‘name‘ }, /* 當給extend方法傳遞一個以上的參數時,它會將所有參數對象合並到第一個裏。 同時,如果對象中有同名屬性時,合並的時候後面的會覆蓋前面的。 將一個新的空對象做為$.extend的第一個參數,defaults和用戶傳遞的參數對象緊隨其後, 這樣做的好處是所有值被合並到這個空對象上,保護了插件裏面的默認值。
*/ this.options = $.extend({}, this.defaults, opt) }; JsonBind.prototype = { bind: function () { if (this.options.jsonData) { if (this.options.jsonData == ‘string‘) { this.options.jsonData = JSON.parse(this.options.jsonData); } }
//獲得觸發事件的元素 var dom = this.$element; var name = this.options.flagName; var data = this.options.jsonData; //遍歷元素內所有含有name屬性的元素 //return使其只是鏈式調用,如:$("#col").get().set().trim() return dom.find("[" + name + "]").each(function () { //取出json中對應name屬性的值 var key = $(this).attr(name); var val = $.trim(data[key]); if (val != ‘‘) { //檢查當前元素標簽,並根據不同標簽進行賦值操作 if ($(this).is("input")) { //檢查當前元素類型,並根據不同類型進行賦值操作 switch ($(this).attr("type")) { case "radio": $(dom).find("input:radio[" + name + "=‘" + key + "‘][value=‘" + val + "‘]").prop("checked", true); break; case "checkbox": $(dom).find("input:checkbox[" + name + "=‘" + key + "‘][value=‘" + val + "‘]").prop("checked", true); //$(this).siblings("[value=‘" + val + "‘]").prop("checked", true); break; default: $(this).val(val); break; } } else if ($(this).is("select")) { $(this).val(val); } } }); } }; //將方法增加到jQuery擴展方法中 $.fn.extend({ dataBind: function (options) { var jsBind = new JsonBind(this, options); return jsBind.bind(); } });

調用方式:

//flagName是可選參數,默認是元素的name屬性
$("#menuForm").dataBind({
    jsonData:JSON.parse(data),
    flagName:‘name‘
});

jQuery插件:Ajax將Json數據自動綁定到Form表單