jQuery weui Select组件显示指定值

jQuery weui有个支持单选或者多选的select弹出层,默认他是这样的

第2部分选择什么值,第1部分就显示什么值,一般的场景支持是没问题了,但本次开发碰到了一个问题。

需求描述:

职业名称后面要显示一些描述,如“法官 2个案件在审理”,“医生 正在做手术”,同时要求点击对应项时,只显示“法官”,“医生”而不显示剩余的描述,根据select现有的逻辑是无法实现这个功能的。只能实现选项是什么,显示的值就是什么,不明白,看下图

解决方案:

查看官方文档,数据通过title和value进行控制,title是显示的值,value一般用于给后端传值

$("#mobile").select({
  title: "选择职业",
  items: [
    {
      title: "法官 2个案件在审理",
      value: "001",
    },
    {
      title: "医生 正在做手术",
      value: "002",
    }
  ]
});

  

很明显我们是可以通过修改items项的配置来实现该需求:

1、首先修改配置项

$("#mobile").select({
    title: "选择职业",
    items: [
        {
            title: "法官 2个案件在审理",
            showTitle: "医生",
            value: "001",
        },
        {
            title: "医生 正在做手术",
            showTitle: "医生",
            value: "002",
        }
    ]
});

  

showTitle用于回显

2、下面修改jquery.weui.js
大概从4695到4998行,Select组件封装在一个函数体中,这样避免变量污染同时也方便管理,大概有5个地方涉及到该需求,一个个来看:

2.1、Select.prototype.updateInputValue方法,该方法用于更新你点击的那个input的值及给他设置一个data-values值,这里有两个地方需要修改
原来的代码:
Select.prototype.updateInputValue = function(values, titles) {
    var v, t;
    if(this.config.multi) {
        v = values.join(this.config.split);
        t = titles.join(this.config.split);
    } else {
        v = values[0];
        t = titles[0];
    }

  修改后的代码:

Select.prototype.updateInputValue = function(values, titles, showtitles) {
    var v, t, s;
    if(this.config.multi) {
      v = values.join(this.config.split);
      t = titles.join(this.config.split);
      s = showtitles.join(this.config.split);
    } else {
      v = values[0];
      t = titles[0];
      s = showtitles[0];
    }

  新增了一个形参,同时对该形参进行了处理

原来的代码

this.$input.val(t).data("values", v); 
this.$input.attr("value", t).attr("data-values", v);

  修改后的代码

this.$input.val(s).data("values", v);
this.$input.attr("value", s).attr("data-values", v);

  可以发现input的值不再是原来的值,改成了配置项showTitle的值

  2.2、Select.prototype.parseInitValue方法,该方法用于反显,也就是你上次选值后再次调用select要把选中的部分给选上,整个方法更新如下:

Select.prototype.parseInitValue = function() {
    var value = this.$input.val();
    var items = this.config.items;
    var dataVales = this.$input.attr('data-values')

    //如果input为空,只有在第一次初始化的时候才保留默认选择。因为后来就是用户自己取消了全部选择,不能再为他选中默认值。
    if( !this._init && (value === undefined || value =&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值