您的位置:首页 > Web前端 > BootStrap

bootstrap combobox clone

2016-06-08 23:42 267 查看

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.element和this.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);}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  bootstrap combobox clone