Jquery-动态添加字段 - 防止删除最后一个项目

时间:2013-11-01 13:07:44

标签: javascript jquery forms dynamic

我有一个动态复制/删除的表单字段

请参阅此处的小提琴:http://jsfiddle.net/obmerk99/y2d4c/6/

在这个功能中,我还需要增加字段的NAME(以及ID等..),如下所示:

o99_brsa_settings[brsa_dash_wdgt_content][0]
o99_brsa_settings[brsa_dash_wdgt_content][1]
o99_brsa_settings[brsa_dash_wdgt_content][2] ...

它正在工作,但问题是当我添加/删除字段时,当它到达最后一个(实际上是第一个)时,它会给我“未定义”并且不会再添加字段。

要查看问题,您需要使用添加/删除“播放”一点。

我认为主要问题是如果我们有[0]和[0] [2]

,如何将所有这些保持在同一个数组级别

我远离JS大师,而且这个代码以某种方式汇集了各种来源。但我现在有点卡住了,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

尝试这种方式:

$(function () {
    $(".addScnt").on("click", function () {
        var i = checkNumberOfElements();
        var scntDiv = $("div[id^='widget_dup']:last");
        var prevDiv = scntDiv.clone();
        var newname = $(prevDiv).find("textarea").attr("name").substring(0, $(prevDiv).find("textarea").attr('name').indexOf(']'));

        prevDiv.find('textarea').attr('name', newname + "][" + i + "]");
        prevDiv.find('textarea').attr('id', newname + "][" + i + "]");
        prevDiv.find('label').attr('for', newname + "][" + i + "]");
        prevDiv.attr('id', $(prevDiv).attr('id') + "_" + i);

        $(scntDiv).after(prevDiv);
    });

    $(document).on("click", ".remScnt", function (event) {
        var i = checkNumberOfElements();

        if (i <= 1) {
            return false;
        } else {
            var target = $(event.currentTarget);
            target.parent("div").remove();
        }
    });
});

function checkNumberOfElements() {
    // Number of textareas
    var i = $("textarea[name^='o99_brsa_settings[brsa_dash_wdgt_content]']").length;
    // Number of divs
    // var i = $("div[id^='widget_dup']").length;

    if (typeof i === undefined) {
        return 0;
    } else {
        return i;
    }
}

演示:http://jsfiddle.net/y2d4c/7/