Bootstrap动态输入选择-同一页面上的多个

博利

我正在尝试使用以下Bootstrap代码段:http//bootsnipp.com/snippets/featured/dynamic-form-fields-add-new-field-on-focus-or-change

我在同一页面的2个不同模式对话框中使用它。

我按照上面链接中的建议实现了它:

HTML:

<div class="container">
    <h3>Selects</h3>
    <div class="row">
        <div class="form-group form-group-multiple-selects col-xs-11 col-sm-8 col-md-4">
            <div class="input-group input-group-multiple-select col-xs-12">
                <select class="form-control" name="values[]">
                    <option value="">Select one</option>
                    <option value="1">Option 1</option>
                    <option value="2">Option 2</option>
                    <option value="3">Option 3</option>
                    <option value="4">Option 4</option>
                </select>
                <span class="input-group-addon input-group-addon-remove">
                    <span class="glyphicon glyphicon-remove"></span>
                </span>
            </div>
        </div>
    </div>
</div>

Javascript:

/* 
    Text fields 
*/
$(function(){
    $(document).on('focus', 'div.form-group-options div.input-group-option:last-child input', function(){
        var sInputGroupHtml = $(this).parent().html();
        var sInputGroupClasses = $(this).parent().attr('class');
        $(this).parent().parent().append('<div class="'+sInputGroupClasses+'">'+sInputGroupHtml+'</div>');
    });

    $(document).on('click', 'div.form-group-options .input-group-addon-remove', function(){
        $(this).parent().remove();
    });
});

/* 
    Selects 
*/
$(function(){

    var values = new Array();

    $(document).on('change', '.form-group-multiple-selects .input-group-multiple-select:last-child select', function(){

        var selectsLength = $('.form-group-multiple-selects .input-group-multiple-select select').length;
        var optionsLength = ($(this).find('option').length)-1;

        if(selectsLength < optionsLength){
            var sInputGroupHtml = $(this).parent().html();
            var sInputGroupClasses = $(this).parent().attr('class');
            $(this).parent().parent().append('<div class="'+sInputGroupClasses+'">'+sInputGroupHtml+'</div>');  
        }

        updateValues();

    });

    $(document).on('change', '.form-group-multiple-selects .input-group-multiple-select:not(:last-child) select', function(){

        updateValues();

    });

    $(document).on('click', '.input-group-addon-remove', function(){
        $(this).parent().remove();
        updateValues();
    });

    function updateValues()
    {
        values = new Array();
        $('.form-group-multiple-selects .input-group-multiple-select select').each(function(){
            var value = $(this).val();
            if(value != 0 && value != ""){
                values.push(value);
            }
        });

        $('.form-group-multiple-selects .input-group-multiple-select select').find('option').each(function(){
            var optionValue = $(this).val();
            var selectValue = $(this).parent().val();
            if(in_array(optionValue,values)!= -1 && selectValue != optionValue)
            {
                $(this).attr('disabled', 'disabled');
            }
            else
            {
                $(this).removeAttr('disabled');
            }
        });
    }

    function in_array(needle, haystack){
        var found = 0;
        for (var i=0, length=haystack.length;i<length;i++) {
            if (haystack[i] == needle) return i;
            found++;
        }
        return -1;
    }
});

仅在页面上使用一次时,它可以完全按预期工作。但是在同一页面上使用2次时,它们会冲突并且无法正常工作。我尝试将所有ID更改为idname2(末尾带有2),并做了整个JavaScript的副本,也将所有ID名称也都替换为2。虽然这行得通,但也似乎是实现此问题的非常糟糕的方式。

您能帮我弄清楚如何实现它,以便可以在同一页面上使用至少两次的代码吗?任何帮助将不胜感激。

贵的

我知道这不会调整您提供的JavaScript,但这应该为您提供一个可以构建的更好结构的基础。.这是使用Knockout v3以及您提供的bootstrap css和markup的基本建议示例。

在这里提琴: http : //jsfiddle.net/n6ngC/55/

更新的小提琴http : //jsfiddle.net/n6ngC/85

淘汰赛是轻量级的,可以从http://knockoutjs.com/downloads/index.html下载(如果您使用的是NuGet,请从那里获取)

这需要做更多的工作,因为由于下拉菜单的更改,最初总是会添加一个项目。.我建议改为使用按钮进行新选择,但这显然取决于要求。

当前,它无法跟踪所做选择后所做的更改,但是将可观察数组更改为包含可观察项将解决此问题。

参见下文:HTML

<div class="container">
    <h3>Meals</h3>
    <div class="row" data-bind="foreach: meals">
        <div class="form-group form-group-multiple-selects col-xs-11 col-sm-8 col-md-4">
            <div class="input-group input-group-multiple-select col-xs-12">
                <select class="form-control" data-bind="options: $root.availableMeals, value: $data, optionsValue: 'id', optionsText: 'text'">
                </select>
                <span class="input-group-addon input-group-addon-remove" data-bind="click: $root.removeMealOption">
                    <span class="glyphicon glyphicon-remove"></span>
                </span>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="form-group form-group-multiple-selects col-xs-11 col-sm-8 col-md-4">
            <div class="input-group input-group-multiple-select col-xs-12">
                <select class="form-control" data-bind="options: availableMeals, value: newMeal, optionsValue: 'id', optionsText: 'text'">
                </select>
            </div>
        </div>
    </div>    
</div>

<div class="container">
    <h3>People</h3>
    <div class="row" data-bind="foreach: people">
        <div class="form-group form-group-multiple-selects col-xs-11 col-sm-8 col-md-4">
            <div class="input-group input-group-multiple-select col-xs-12">
                <select class="form-control" data-bind="options: $root.availablePeople, value: $data, optionsValue: 'id', optionsText: 'text'">
                </select>
                <span class="input-group-addon input-group-addon-remove" data-bind="click: $root.removePersonOption">
                    <span class="glyphicon glyphicon-remove"></span>
                </span>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="form-group form-group-multiple-selects col-xs-11 col-sm-8 col-md-4">
            <div class="input-group input-group-multiple-select col-xs-12">
                <select class="form-control" data-bind="options: availablePeople, value: newPerson, optionsValue: 'id', optionsText: 'text'">
                </select>
            </div>
        </div>
    </div>    
</div>

Javascript:

function MyViewModel() {
    var self = this;

    self.newMeal = ko.observable();
    self.newPerson = ko.observable();

    // the available list of options for each dropdown    
    self.availableMeals = [
        { id:"ST", text: "Standard (sandwich)" },
        { id: "PR", text: "Premium (lobster)" },
        { id: "UL", text: "Ultimate (whole zebra)" }
    ];

    self.availablePeople = [
        { id:"ST", text: "Steve" },
        { id: "BT", text: "Bert" },
        { id: "ER", text: "Ernie" }
    ];   

    // the selected values
    // this will be a list of objects that have their own observable properties
    self.meals = ko.observableArray([]); 
    self.people = ko.observableArray([]);

    // separate add and remove options
    self.addMealOption = function(meal) { self.meals.push(meal); }
    self.removeMealOption = function(meal) { self.meals.remove(meal); }

    self.addPersonOption = function(person) { self.people.push(person); }
    self.removePersonOption = function(person) { self.people.remove(person); } 

    self.newMeal.subscribe(function(value) {
        self.addMealOption(value);
    });

    self.newPerson.subscribe(function(value) {
        self.addPersonOption(value);
    }); 
}

// Activates knockout.js
ko.applyBindings(new MyViewModel());

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

同一页面上的多个输入 [type=file]

来自分类Dev

当多个选择元素在同一页面上时,如何获得正确的 selectedIndex?

来自分类Dev

选择单击项目的子项(同一页面上的多个副本)

来自分类Dev

Twitter的Bootstrap 3在同一页面上有多个导航栏

来自分类Dev

使用Twitter的Bootstrap 3在同一页面上的多个导航栏

来自分类Dev

通过同一页面上的函数传递输入

来自分类Dev

如何在同一页面上的多个按钮上打开一个Bootstrap模式?

来自分类Dev

如何在同一页面上使用具有相同 ID 的多个(动态)切换按钮?

来自分类Dev

动态填充同一页面上其他两个选择的选择

来自分类Dev

动态填充同一页面上其他两个选择的选择

来自分类Dev

选择输入中的onChange事件,然后在同一页面上显示处理结果

来自分类Dev

从用户处获取输入,并在同一页面上显示相同的输入

来自分类Dev

在同一页面中为多个输入提前输入twitter bootstrap

来自分类Dev

如何在同一页面上获得结果,为什么需要输入?

来自分类Dev

在同一页面上将用户输入显示为评论

来自分类Dev

在同一页面上输入文件的多种形式

来自分类Dev

调试下拉菜单并在同一页面上显示用户表单输入

来自分类Dev

如何在同一页面上获得结果,为什么需要输入?

来自分类Dev

如何在进行 SQL 查询时在同一页面上使用输入变量?

来自分类Dev

Bootstrap在同一页面上打开2个不同的模态对话框

来自分类Dev

Bootstrap-在同一页面上的手风琴之间进行链接

来自分类Dev

kendo下拉菜单和bootstrap下拉菜单在同一页面上

来自分类Dev

Eclipse-如何在同一页面上将多个查看器设置为选择提供者

来自分类Dev

Django-如何在同一页面中使多个对象动态化

来自分类Dev

在同一页面/站点上选择2个多个版本

来自分类Dev

从同一页面中的多个时钟选择器获取数据

来自分类Dev

具有 AJAX 的同一页面中的多个日期选择器

来自分类Dev

Material2 - 同一页面上的两个动态 md-table,不起作用

来自分类Dev

在同一页面上的两个输入(差异ID)上的两个自动完成

Related 相关文章

  1. 1

    同一页面上的多个输入 [type=file]

  2. 2

    当多个选择元素在同一页面上时,如何获得正确的 selectedIndex?

  3. 3

    选择单击项目的子项(同一页面上的多个副本)

  4. 4

    Twitter的Bootstrap 3在同一页面上有多个导航栏

  5. 5

    使用Twitter的Bootstrap 3在同一页面上的多个导航栏

  6. 6

    通过同一页面上的函数传递输入

  7. 7

    如何在同一页面上的多个按钮上打开一个Bootstrap模式?

  8. 8

    如何在同一页面上使用具有相同 ID 的多个(动态)切换按钮?

  9. 9

    动态填充同一页面上其他两个选择的选择

  10. 10

    动态填充同一页面上其他两个选择的选择

  11. 11

    选择输入中的onChange事件,然后在同一页面上显示处理结果

  12. 12

    从用户处获取输入,并在同一页面上显示相同的输入

  13. 13

    在同一页面中为多个输入提前输入twitter bootstrap

  14. 14

    如何在同一页面上获得结果,为什么需要输入?

  15. 15

    在同一页面上将用户输入显示为评论

  16. 16

    在同一页面上输入文件的多种形式

  17. 17

    调试下拉菜单并在同一页面上显示用户表单输入

  18. 18

    如何在同一页面上获得结果,为什么需要输入?

  19. 19

    如何在进行 SQL 查询时在同一页面上使用输入变量?

  20. 20

    Bootstrap在同一页面上打开2个不同的模态对话框

  21. 21

    Bootstrap-在同一页面上的手风琴之间进行链接

  22. 22

    kendo下拉菜单和bootstrap下拉菜单在同一页面上

  23. 23

    Eclipse-如何在同一页面上将多个查看器设置为选择提供者

  24. 24

    Django-如何在同一页面中使多个对象动态化

  25. 25

    在同一页面/站点上选择2个多个版本

  26. 26

    从同一页面中的多个时钟选择器获取数据

  27. 27

    具有 AJAX 的同一页面中的多个日期选择器

  28. 28

    Material2 - 同一页面上的两个动态 md-table,不起作用

  29. 29

    在同一页面上的两个输入(差异ID)上的两个自动完成

热门标签

归档