easyui 对form扩展

功能描述

 easyui 中  combobox 多选赋值方法如下:

$('#cbx').combobox('setValues', ['01','02'])

然而,业务中是以  “01,02” 的形式存储,并且 combobox 较多,为防止业务数据冗余,影响后期维护,现对 form 进行扩展 myLoad,实现 combobox 在多选(multiple = true)情况下,可以用字符串自动赋值 combobox 的操作,并且不影响 load 原有的功能,比如 "01,02" 可以直接赋值给 combobox。

代码

$.extend($.fn.form.methods, {
    myLoad: function (jq, param) {
        return jq.each(function () {
            load(this, param);
        });

        function load(target, data) {
            if (!$.data(target, "form")) {
                $.data(target, "form", {
                    options: $.extend({},
                    $.fn.form.defaults)
                });
            }
            var options = $.data(target, "form").options;
            if (typeof data == "string") {
                var param = {};
                if (options.onBeforeLoad.call(target, param) == false) {
                    return;
                }
                $.ajax({
                    url: data,
                    data: param,
                    dataType: "json",
                    success: function (data) {
                        _load2(data);
                    },
                    error: function () {
                        options.onLoadError.apply(target, arguments);
                    }
                });
            } else {
                _load2(data);
            }
            function _load2(data) {
                var form = $(target);
                for (var name in data) {
                    var val = data[name];
                    var rr = setChecked(name, val);
                    if (!rr.length) {
                        var f = form.find("input[numberboxName="" + name + ""]");
                        if (f.length) {
                            f.numberbox("setValue", val);
                        } else {
                            $("input[name="" + name + ""]", form).val(val);
                            $("textarea[name="" + name + ""]", form).val(val);
                            $("select[name="" + name + ""]", form).val(val);
                        }
                    }
                    setValue(name, val);
                }
                options.onLoadSuccess.call(target, data);
                _validate(target);
            };
            //设置选中
            function setChecked(name, val) {
                var form = $(target);
                var rr = $("input[name="" + name + ""][type=radio], input[name="" + name + ""][type=checkbox]", form);
                $.fn.prop ? rr.prop("checked", false) : rr.attr("checked", false);
                rr.each(function () {
                    var f = $(this);
                    if (f.val() == String(val)) {
                        $.fn.prop ? f.prop("checked", true) : f.attr("checked", true);
                    }
                });
                return rr;
            };
            //设置值
            function setValue(name, val) {
                var form = $(target);
                var types = ["combotree", "combogrid", "datetimebox", "datebox"];
                var comboboxTypes = ["combobox", "combo"];
                var c = form.find("[comboName="" + name + ""]");
                if (c.length) {
                    for (var i = 0; i < types.length; i++) {
                        var type = types[i];
                        if (c.hasClass(type + "-f")) {
                            if (c[type]("options").multiple) {
                                c[type]("setValues", val);
                            } else {
                                c[type]("setValue", val);
                            }
                            return;
                        }
                    }
                    for (var i = 0; i < comboboxTypes.length; i++) {
                        var comboboxType = comboboxTypes[i];
                        if (c.hasClass(comboboxType + "-f")) {
                            if (c[comboboxType]("options").multiple) {
                                if (val != null) {
                                    var valArray = val.split(",")
                                    c[comboboxType]("setValues", valArray);
                                }

                            } else {
                                c[comboboxType]("setValue", val);
                            }
                            return;
                        }
                    }
                }
            };
        };
    }
});

//表单字段验证,当所有字段都有效的时候返回true。
function _validate(target) {
    if ($.fn.validatebox) {
        var t = $(target);
        t.find(".validatebox-text:not(:disabled)").validatebox("validate");
        var valid = t.find(".validatebox-invalid");
        valid.filter(":not(:disabled):first").focus();
        return valid.length == 0;
    }
    return true;
};

  

原文地址:https://www.cnblogs.com/liruihuan/p/9172450.html