• 构造带清除按钮的combo


    效果图:

    最近在做项目遇到。combo控件选择后触发事件的情况,用onSelect发现,没法选择空item

    于是就想办法解决:

    第一种方案:第一行增加空字符串文本的item?试试,绑定数据源的时候,增加了一个项,text和value都是"",结果发现,下拉panel中很难看,没有撑开到一定高度(可能跟span的innerHTML为空字符串有关,于是将text该为" "),这次倒是撑开了,结果:选中之后文本框的文本变成了" ",又不好对onClick事件进行修改(easyui封装好的)

    第二种方案:又看到有个onChange事件,试试这个。。。。combobox按backspace键的时候还真触发了,可是发现,文本发生改变就立即触发该事件,但是在此处我需要执行的是grid重新加载数据(从服务端加载),而且combotree的文本框无法修改内容。。又宣告失败

    实在没办法,去看combo的构造函数吧……,发现combo初始化的时候是增加了一个input(显示文本的)一个span(显示下拉图标的)还有一个hidden(显示选择项的value的)

    那么只需要在span前边多增加一个span即可,给新增加的span增加点击事件:

    还是不能对easyui代码进行修改,那只好重新写一个方法对dom进行修改了:

    View Code
     1 jQueryClearCombo = function (Combo) {
    2 var combo = Combo.data().combo.combo;
    3 var showClear = Combo.combo("options").showClear;
    4 if (!showClear) {
    5 showClear = Combo.attr("showClear");
    6 }
    7 var clear = combo.find(".combo-clear");
    8 var text = combo.find(".combo-text");
    9 if (!clear.hasClass("combo-clear")) {
    10 if (showClear != "0") {
    11 $(text).after("<span><span class=\"combo-clear\"></span></span>");
    12 clear = combo.find(".combo-clear");
    13 var w=clear.outerWidth();
    14 text.width(text.width() - w);
    15 clear.bind("click.combo", function () {
    16 var v = "";
    17 if (Combo.hasClass("easyui-combotree")) {
    18 v = Combo.combotree("getValue");
    19 Combo.combotree("setValue", "");
    20 }
    21 else if (Combo.hasClass("easyui-combobox")) {
    22 v = Combo.combobox("getValue");
    23 Combo.combobox("setValue", "");
    24 }
    25 var onClear = Combo.combo("options").onClear;
    26 if (typeof (onClear) == "function") {
    27 onClear(v, Combo);
    28 }
    29 }).bind("mouseenter.combo", function (a, b, c, d, e) {
    30 $(this).addClass("combo-clear-hover");
    31 }).bind("mouseleave.combo", function () {
    32 $(this).removeClass("combo-clear-hover");
    33 });
    34 }
    35 }
    36 else if (showClear == "0") {
    37 var w = clear.outerWidth()
    38 text.width(text.width() + w);
    39 combo.find("span:has(.combo-clear)").remove();
    40 }
    41 }

    调用的时候,设置showClear属性为0 则不显示清除按钮,默认情况下是带清除按钮的

    View Code
    1 {
    2 "onClear": function (v, e) {
    3 errorMessage("点击了清除按钮,清除前值为:" + v);
    4 },
    5 "allowClick": function (node) {
    6 return node.attributes.OrgType == "2";
    7 }
    8 }

    如果需要监听清除按钮事件,构造combo的时候 设置一个onClear函数即可(第一个参数为删除之前的旧值,可判断旧值也为空的话,就表示值没发生改变不需要执行ajax代码;第二个为combo对象)

    另外一个  combotree中,有些节点不可以单击选则,传递一个allowClick函数即可,参数为combotree所点击项的节点(node)

    代码如下:

    View Code
     1 QueryComboTree = function (ComboObject, params) {
    2 if (params == null) {
    3 params = {};
    4 }
    5 var allowClick = params.allowClick, ErrorCallBack = params.onLoadError;
    6 var url = $(ComboObject).attr("url");
    7 if (url == null || url == "") {
    8 url = getRootAjax("HRService")
    9 + '?ClassName=HRService.PublicFunc&MethodName=ComboTreeJson&DictCode='
    10 + ComboObject.attr("Code");
    11 }
    12 if ($(ComboObject).attr("onlyClickLeaf") == "1") {
    13 params.allowClick = function (n) {
    14 return $("").tree("isLeaf", n.target);
    15 }
    16 }
    17 $.extend(params, {
    18 url: url,
    19 onLoadSuccess: function (response, json) {
    20 SuccessOperation(response, json, function () {
    21 jQueryClearCombo(ComboObject);
    22 var op = ComboObject.combotree("options")
    23 if (typeof (op.allowClick) == "function") {
    24 var objTree = ComboObject.data().combotree.tree.data();
    25 var oldClick = objTree.tree.options.onClick;
    26 objTree.tree.options.onClick = function (node) {
    27 if (op.allowClick(node)) {
    28 oldClick(node);
    29 }
    30 else {
    31 return;
    32 }
    33 }
    34 }
    35 });
    36 },
    37 onLoadError: function (response) {
    38 ErrorOperation(response, ErrorCallBack);
    39 }
    40 });
    41 ComboObject.combotree(params);
    42 }
  • 相关阅读:
    挖矿病毒入侵-分析总结
    Linux查看包依赖关系的神器-repoquery分享
    Elasticsearch 字段为空(null)记录查询
    Python 导数 Elasticsearch 元数据到CSV
    基于docker快速构建MySQL主从复制环境
    Redis环境简单部署(集群/双机)
    FTP 脚本 to Shell脚本&bat脚本&python脚本
    专用服务器模式&共享服务器模式
    CentOS 7安装部署ELK 6.2.4-SUCCESS
    zabbix 数据库迁移变更
  • 原文地址:https://www.cnblogs.com/softxu/p/2405941.html
Copyright © 2020-2023  润新知