bootstrap combobox clone

bootstrap combobox clone issue

bootstrap combobox在使用过程中项目需求实现过程中遇见的问题,百度无果(反正我是通过百度没有找到相关的问题),然后转向google查看外文网站,发现在stackoverflow 有人提过同样的需求和问题,但是没有看到明确的解决方案,所以只能自己解决了.

要实现的需求如截图:

  • 可以新增输入(下拉选项中没有的);
  • clone多个combobox,事件正常;
  • 实现form提交到后台。

这里写图片描述

jsp:

<table>
<tr id="value">
<td style="width: auto" id="name_title">Name</td>
<td style="width: 300px"  id ="name_area">
    <select class="combobox form-control" name="name" id="name"  >
            <option value="" selected="selected">Select a Name</option>
            <option value="PHP">PHP</option>
            <option value="MySQL">MySQL</option>
            <option value="SQL">SQL</option>
            <option value="PostgreSQL">PostgreSQL</option>
            <option value="HTML">HTML</option>
            <option value="CSS">CSS</option>
    </select> 
</td>
</tr>
</table>

Issue

1.在form表单的table中clone一个combobox,点击新clone的combobox,触发的却是上一个combobox的事件;

参考了stackoverflow 上提到的思路,结合实际解决:
在javascript中,先remove掉clone的combobox相关组件,在remove之前将其保存在一个变量中;
然后remove之后将该变量追加在指定的位置;之后会发现追加的同一位置,clone的控件有重复现象,并且一个是无法正常使用的,然后F12查看一下网页元素,会发现会多处一个combobox-container,删除之后就正常了。

js代码:

<script type="text/javascript">
    ....
    var value_clone = $(#value).clone();//这里要设置为false,或者默认(false)
    var newview = value_clone.find("#name_area").clone(true);
    value_clone.find("#name_area").remove();
    value_clone.find("#name_title").after(newview);
    value_clone.find(".combobox-container:last").remove();//去重复
    value_clone.find("select").attr("name","name");//为控件的name属性赋值,combobox会将该属性值传递给input
    value_clone.find(".combobox").combobox();
    ....
</script>

2.无法新增输入,获取不到combobox的值。
一个是在上面jsp的js中为combobox的select属性name 赋值;
再一个需要修改一下bootstrap combobox的js 文件:
查看原文件会发现,在input失去焦点时会调用blur函数,该函数里面会将this. elementthis. target清空,所以造成无法输入新的内容。我的解决方法:没有删除清空操作,在最后重新赋值。

, blur: function (e) {
      var that = this;
      this.focused = false;
      var val = this.$element.val();
      if (!this.selected && val !== '' ) {
        this.$element.val('');
        this.$source.val('').trigger('change');
        this.$target.val('').trigger('change');//source code , don't allow input new value
        //add two line code to allow add new value, more than just select
        this.$element.val(val);
        this.$target.val(val);
      }
      if (!this.mousedover && this.shown) {setTimeout(function () { that.hide(); }, 200);}
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值