【问题标题】:A new input field adding with dropdown value添加下拉值的新输入字段
【发布时间】:2016-07-31 15:07:01
【问题描述】:
  1. 当用户单击“+”按钮时,应添加一行,其中包含下拉列表和输入字段。我想将该输入字段名称作为每行的下拉值。

  2. 如果我在第一个下拉列表中选择“facebook”,它不应显示在第二个下拉列表中。简单地选择值不应显示在下一个下拉列表中。我做了那部分。但我的问题是,如果我在第二个下拉列表中选择“Google”,在第三个下拉列表中选择“Yahoo”。如果我再次单击第一个或第二个下拉菜单,它不应该再次显示“雅虎”。

请在下方找到代码所在的链接并修复它。

http://jsfiddle.net/mhmdsohail/v9uem13u/5/

$(document.body).on('click', '.add-more', function (e) {
    var lastSelect = $("select").last().find('option');
    var toAppend = '';
    if (lastSelect.length > 1) {
        toAppend += '<select name="select[]">';
        $.each(lastSelect, function (i, v) {
            if ($(this).text() !== $("select:last option:selected").text())
                toAppend += '<option value="' + $(this).val() + '">' + $(this).text() + '</option>';
        });
        toAppend += '</select>';
        toAppend += '<input type="text" name=""><br>';
    }
    $(".append-select").append(toAppend);
});

【问题讨论】:

  • 在此处发布您的 html 代码
  • @MayankPandey 请检查jsfiddle.net/mhmdsohail/v9uem13u/5
  • 您应该在代码中包含选择更改处理。这可以帮助您减少工作量。我还建议包含一个数组来指定可能的选项.. 这样您就不必在选择更改期间解析 DOM,例如var options = [{name: "Facebook", inUse=true}, {...}, ...]
  • 理解这一点很棘手。您能给我们一些示例用例吗? 1- 用户在下拉列表中选择一个项目并按 +。添加了一个不包括初始选定项目的新行。第一个下拉列表会发生什么?您是否还需要删除所选项目? 2-“但是我的问题是,如果我在第二个下拉列表中选择“Google”,在第三个下拉列表中选择“Yahoo”。如果我再次单击第一个或第二个下拉列表,它不应该再次显示“Yahoo””它不应该在哪里显示雅虎?在之前的下拉菜单中?
  • @GokhanDilek 我需要输出如下图acmsohail.com/error.jpg 最初它在第一个下拉列表中显示所有值(Facebook、Google、Yahoo、Whatsapp、Youtube)。您在第一个下拉列表中选择“Facebook”。并单击“+”添加一行。在第二个下拉菜单中,“Facebook”没有显示它工作正常。同样,如果您在第二个下拉列表中选择 Google,则“facebook 和 google”不会显示在第三个下拉列表中。但是,如果您返回并选择第一个下拉菜单,则问题再次出现,它会一直显示“google”。无论您在下拉列表中选择什么,它都不应显示在 otherdropdown

标签: javascript php jquery html css


【解决方案1】:

这段 JavaScript 代码可以满足您的要求:

(据我了解。这将从所有当前的dropdowns(以及未来的)中删除选定的选项,并且下一个输入字段将包含属性name,其值等于上次选择的@987654324 @选项)

 $(document.body).on('click', '.add-more', function (e) {
                var lastSelect = $("select").last().find('option');
                var selectedOption = $('select:last').val();
                var toAppend = '';
                if (lastSelect.length > 1) {
                    toAppend += '<select name="select[]">';
                    $.each(lastSelect, function (i, v) {
                        if ($(this).text() !== $("select:last option:selected").text())
                            toAppend += '<option value="' + $(this).val() + '">' + $(this).text() + '</option>';
                    });
                    toAppend += '</select>';
                    toAppend += '<input type="text" name="' + selectedOption + '"><br>';
                }
                $(".append-select").append(toAppend);
                if ($('select:last > option').length > 1)
                        $("select").find('option[value=' + selectedOption + ']').remove();
            });

我已尝试尽可能减少更改(仅编辑了 3 或 4 行)。

【讨论】:

  • 您的回答部分正确。但它没有在每一行中显示选定的下拉列表。我的要求是用户不能在新行中选择相同的下拉值。下拉值只能在整个表单中选择一次,它也应该显示在下拉列表中。示例如果我在第一个下拉列表中选择 facebook,在第二个下拉列表中选择 google。如果我再次单击 facebook 下拉菜单,它不应该允许再次选择 google。但目前它允许。如何避免它。我需要这样的输出。 acmsohail.com/error.jpg
  • @user3671027 我注意到您的回复以及您的电子邮件。别担心。只是同时解决其他一些事情。 :)
  • 提前致谢。请帮我解决。
猜你喜欢
  • 2019-03-07
  • 1970-01-01
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
  • 2015-09-26
相关资源
最近更新 更多