【问题标题】:Not able to select the dropdown value and How do I display the dynamic field after selecting each dropdown?无法选择下拉值以及如何在选择每个下拉列表后显示动态字段?
【发布时间】:2019-06-29 20:00:01
【问题描述】:

我有一个名为“添加合作伙伴”的按钮。当您单击此按钮时,它将显示类似这样的动态行。

显示该行后,我点击先选择Dropbox,然后选择Bank two。

现在请注意,如果我点击添加银行,那么第一个选择下拉菜单将自动填充显示第一行选择的值。我的意思是我选择了Bank two 然后Bank two 将被选择。

如果我从第一行将其从Bank two 更改为Bank three,那么它也会更改第一个选择下拉列表的第二行中的。例如

上述情况对我来说非常有效。没有问题。

现在让我们谈谈这个问题。 如果我再次点击 Add partner 按钮,那么它将显示 ID 号为 3 的新行。类似这样的

现在在 ID 3 上,我无法从下拉列表中更改 Bank three。我必须对每个 ID 执行上述方案。这是我的第一个问题。

我的第二个问题是关于状态下拉菜单。每个选项都有不同的字段。我的意思是,如果我选择Status one,那么将显示一个输入字段。像这样的。

现在,如果用户选择状态,我每次都必须显示该字段。 例如。我单击添加银行并选择状态,但它正在删除第一条评论。

我的预期输出是

如果需要更多解释,请告诉我。你能帮我解决这个问题吗?

$(document).on('change', '.fileStatus', function() {
  var fileStatus = $('.fileStatus option:selected').val();
  $('.fileStatus').val(fileStatus);
})

$(document).ready(function() {

  // $('.fileStatus').on('change', '.fileStatus', function(){

  var max_fields = 20; //maximum input boxes allowed
  var wrapper = $(".dynamicform"); //Fields wrapper

  var add_button = $(".click_partner"); //Add button ID

  var x = 1; //initlal text box count
  a = 1;
  $(add_button).click(function(e) { //on add input button click
    e.preventDefault();
    if (x < max_fields) { //max input box allowed
      x++; //text box increment

      a++;
      //$("input[id^=medication_name]").focus();
      $(wrapper).append('<div class="clearfix"></div><div class=" custom_fields medication_info" data-id="' + inner(a, 2) + '"><div class=" row"><div class="col-xl-1 col-lg-1 col-md-1 col-sm-12 col-xs-12 "><div class="label" id="unique">ID ' + x + ':</div></div>	<div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 "><div class="form-group"><input type="text" name="order[]" value="user-10-' + inner(a, 2) + '" class="form-control"></div></div><div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 "><div class="form-group"><select name="parner[]" class="form-control fileStatus"><option disabled="" selected>Choose</option> <option value="1">Bank one</option><option value="2">Bank two</option><option value="3">Bank three</option></select></div>	</div>	<div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 "><a href="#" class="new_add_bank bankLink" id="' + x + '">Add Bank</a>	<div class="form-group"><select name="parner[]" class="form-control"><option disabled="" selected>Choose</option> <option value="">Bank one</option><option value="">Bank two</option><option value="">Bank Three</option></select></div> </div><div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 "><div class="form-group"><select name="parner[]" class="form-control pp_fileStatus"><option disabled="" selected>Status</option> <option value="1">Status one</option><option value="2">Status two</option><option value="3">Status Three</option></select></div></div>  <div class="i-imgset remove_field"><img src="http://www.clker.com/cliparts/I/R/h/v/h/g/remove-icon-md.png" alt="remove"> </div></div></div>');
    }
  });

  $(wrapper).on("click", ".remove_field", function(e) { //user click on remove text
    e.preventDefault();
    $(this).find('.click_partner').closest('.custom_fields').remove();
    x++;
  });

  $(wrapper).on('click', '.new_add_bank', function() {
    var innercoutner = $(this).closest('.medication_info').find('.medication_info').children('.row').length + 1;
    var c = $(this).closest('.medication_info').attr('data-id');

    var fileStatus = $('.fileStatus:last option:selected').val();
    // alert(fileStatus);

    $(this).closest('.row').append('<div class="clearfix"></div><div class="  medication_info"><div class=" row"><div class="col-xl-1 col-lg-1 col-md-1 col-sm-12 col-xs-12 "></div>	<div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 "><div class="form-group"><input type="text" name="order[]" value="user-10-' + c + '-' + inner(innercoutner, 2) + '" class="form-control"></div></div><div class="col-xl-3 col-lg-3 col-md-3 col-sm-12 col-xs-12 "><div class="form-group"><select name="parner[]" class="form-control fileStatus"><option disabled="" selected>Choose</option> <option value="1">Bank one</option><option value="2">Bnak two</option><option value="3">Bank three</option></select></div>	</div>	<div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 "><div class="form-group"><select name="parner[]" class="form-control"><option disabled="" selected>Choose</option> <option value="">Bank one</option><option value="">Bank two</option><option value="">Bank three</option></select></div> </div><div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 "><div class="form-group"><select name="parner[]" class="form-control pp_fileStatus"><option disabled="" selected>Status</option> <option value="1">Status one</option><option value="2">Status two</option><option value="3">Status Three</option></select></div></div><div class="i-imgset remove_field"> <img src="http://www.clker.com/cliparts/I/R/h/v/h/g/remove-icon-md.png" alt="remove"> </div></div></div>');
    $('.fileStatus:last').val(fileStatus);

  });

  $(wrapper).on("click", ".remove_field", function(e) { //user click on remove text
    e.preventDefault();
    $(this).closest('.medication_info').remove();
    x--;
  });

  // increment==============================================
  function inner(k, width, t) {
    t = t || '0';
    k = k + '';
    /* 
    		  return n.length >= ? n : new Array(w widthidth - n.length + 1).join(z) + n; */
    return k.length >= width ? k : new Array(width - k.length + 1).join(t) + k;
  }

});


$(document).on('change', '.pp_fileStatus', function(event) {
  //alert($(this).val());
  $(".input-wrapper").remove();
  if (($('.pp_fileStatus').val() == '1')) {
    $(event.target).closest('.row').append('<div class="col-xl-3 col-lg-3 col-md-3 col-sm-12 col-xs-12 input-wrapper"><div class="form-group"> <label>Remark</label><input type="text" name="remark[]"  class="form-control"></div></div>');
  } else if (($('.pp_fileStatus').val() == '2')) {
    $(event.target).closest('.row').append('<div class="col-xl-1 col-lg-1 col-md-1 col-sm-12 col-xs-12 input-wrapper"><div class="form-group"> <label>Date</label><input type="text" name="reasonDate[]"  class="form-control datetimepicker"></div></div><div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 input-wrapper"><div class="form-group"> <label>Remark</label><input type="text" name="remark[]"  class="form-control"></div></div>');
  } else {
    $(event.target).closest('.row').append('<div class="col-xl-1 col-lg-1 col-md-1 col-sm-12 col-xs-12 input-wrapper"><div class="form-group"> <label>Time</label><input type="text" name="time[]"  class="form-control"></div></div><div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 input-wrapper"><div class="form-group"> <label>Reason</label><input type="text" name="reason[]"  class="form-control"></div></div>');

  }
});
.i-imgset {
  width: 30px;
}

.i-imgset img {
  width: 100%;
}

.bankLink {
  position: absolute;
  top: -24px;
  font-size: 14px;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">

<div class="container">
  <div class="click_partner"> <input type="button" name="parner" value="Add Partner"></div>
  <div class="dynamicform">

  </div>
</div>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>

【问题讨论】:

  • @cssyphus,我可以知道代码有什么问题吗?我使用相同的代码并在本地拍摄之后运行屏幕截图。我也会纠正我的一面。

标签: javascript jquery html css


【解决方案1】:

你有两个主要问题。

第一个:您在 .pp_fileStatus 上的委托事件是错误的,因为您使用全局选择器而不是本地选择器。例如:

$('.pp_fileStatus').val()

代替:

$(this).val()

第二个问题遇到了同样的问题,但对于 .fileStatus 上的委派事件。新的是:

$(document).on('change', '.fileStatus', function() {
    var fileStatus = $(this).find('option:selected').val();
    $(this).closest('.row').find('.medication_info .fileStatus').val(fileStatus);
})

var max_fields = 20; //maximum input boxes allowed
var wrapper = $(".dynamicform"); //Fields wrapper

var add_button = $(".click_partner"); //Add button ID

var x = 1; //initlal text box count
a = 1;
$(add_button).click(function(e) { //on add input button click
    e.preventDefault();
    if (x < max_fields) { //max input box allowed
        x++; //text box increment

        a++;
        //$("input[id^=medication_name]").focus();
        $(wrapper).append('<div class="clearfix"></div><div class=" custom_fields medication_info" data-id="' + inner(a, 2) + '"><div class=" row"><div class="col-xl-1 col-lg-1 col-md-1 col-sm-12 col-xs-12 "><div class="label" id="unique">ID ' + x + ':</div></div>	<div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 "><div class="form-group"><input type="text" name="order[]" value="user-10-' + inner(a, 2) + '" class="form-control"></div></div><div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 "><div class="form-group"><select name="parner[]" class="form-control fileStatus"><option disabled="" selected>Choose</option> <option value="1">Bank one</option><option value="2">Bank two</option><option value="3">Bank three</option></select></div>	</div>	<div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 "><a href="#" class="new_add_bank bankLink" id="' + x + '">Add Bank</a>	<div class="form-group"><select name="parner[]" class="form-control"><option disabled="" selected>Choose</option> <option value="">Bank one</option><option value="">Bank two</option><option value="">Bank Three</option></select></div> </div><div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 "><div class="form-group"><select name="parner[]" class="form-control pp_fileStatus"><option disabled="" selected>Status</option> <option value="1">Status one</option><option value="2">Status two</option><option value="3">Status Three</option></select></div></div>  <div class="i-imgset remove_field"><img src="http://www.clker.com/cliparts/I/R/h/v/h/g/remove-icon-md.png" alt="remove"> </div></div></div>');
    }
});

$(wrapper).on("click", ".remove_field", function(e) { //user click on remove text
    e.preventDefault();
    $(this).find('.click_partner').closest('.custom_fields').remove();
    x++;
});

$(wrapper).on('click', '.new_add_bank', function() {
    var innercoutner = $(this).closest('.medication_info').find('.medication_info').children('.row').length + 1;
    var c = $(this).closest('.medication_info').attr('data-id');

    var fileStatus = $('.fileStatus:last option:selected').val();
    // alert(fileStatus);

    $(this).closest('.row').append('<div class="clearfix"></div><div class="  medication_info"><div class=" row"><div class="col-xl-1 col-lg-1 col-md-1 col-sm-12 col-xs-12 "></div>	<div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 "><div class="form-group"><input type="text" name="order[]" value="user-10-' + c + '-' + inner(innercoutner, 2) + '" class="form-control"></div></div><div class="col-xl-3 col-lg-3 col-md-3 col-sm-12 col-xs-12 "><div class="form-group"><select name="parner[]" class="form-control fileStatus"><option disabled="" selected>Choose</option> <option value="1">Bank one</option><option value="2">Bnak two</option><option value="3">Bank three</option></select></div>	</div>	<div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 "><div class="form-group"><select name="parner[]" class="form-control"><option disabled="" selected>Choose</option> <option value="">Bank one</option><option value="">Bank two</option><option value="">Bank three</option></select></div> </div><div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 "><div class="form-group"><select name="parner[]" class="form-control pp_fileStatus"><option disabled="" selected>Status</option> <option value="1">Status one</option><option value="2">Status two</option><option value="3">Status Three</option></select></div></div><div class="i-imgset remove_field"> <img src="http://www.clker.com/cliparts/I/R/h/v/h/g/remove-icon-md.png" alt="remove"> </div></div></div>');
    $('.fileStatus:last').val(fileStatus);

});

$(wrapper).on("click", ".remove_field", function(e) { //user click on remove text
    e.preventDefault();
    $(this).closest('.medication_info').remove();
    x--;
});

// increment==============================================
function inner(k, width, t) {
    t = t || '0';
    k = k + '';
    /*
     return n.length >= ? n : new Array(w widthidth - n.length + 1).join(z) + n; */
    return k.length >= width ? k : new Array(width - k.length + 1).join(t) + k;
}

$(document).on('change', '.fileStatus', function() {
    var fileStatus = $(this).find('option:selected').val();
    $(this).closest('.row').find('.medication_info .fileStatus').val(fileStatus);
})

$(document).on('change', '.pp_fileStatus', function(event) {
    //alert($(this).val());
    var operation = 'append';
    var ele = $(this).closest('.row');
    if ($(this).closest('.row').find('.medication_info').length != 0) {
        operation = 'after';
        ele = ele.find('.i-imgset:first');
        ele.siblings(".input-wrapper").remove();
    } else {
        ele.find(".input-wrapper").remove();
    }
    if ($(this).val() == '1') {
        ele[operation]('<div class="col-xl-3 col-lg-3 col-md-3 col-sm-12 col-xs-12 input-wrapper"><div class="form-group"> <label>Remark</label><input type="text" name="remark[]"  class="form-control"></div></div>');
    } else if ($(this).val() == '2') {
        ele[operation]('<div class="col-xl-1 col-lg-1 col-md-1 col-sm-12 col-xs-12 input-wrapper"><div class="form-group"> <label>Date</label><input type="text" name="reasonDate[]"  class="form-control datetimepicker"></div></div><div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 input-wrapper"><div class="form-group"> <label>Remark</label><input type="text" name="remark[]"  class="form-control"></div></div>');
    } else {
        ele[operation]('<div class="col-xl-1 col-lg-1 col-md-1 col-sm-12 col-xs-12 input-wrapper"><div class="form-group"> <label>Time</label><input type="text" name="time[]"  class="form-control"></div></div><div class="col-xl-2 col-lg-2 col-md-2 col-sm-12 col-xs-12 input-wrapper"><div class="form-group"> <label>Reason</label><input type="text" name="reason[]"  class="form-control"></div></div>');
    }
});
.i-imgset {
    width: 30px;
}

.i-imgset img {
    width: 100%;
}

.bankLink {
    position: absolute;
    top: -24px;
    font-size: 14px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css">

<div class="container">
    <div class="click_partner"> <input type="button" name="parner" value="Add Partner"></div>
    <div class="dynamicform">

    </div>
</div>

【讨论】:

  • 给我一些时间检查一下。由于大雨,我家出现了一些网络问题。
  • 在 new_add_bank 函数中检查这一行 $(this).closest('.row').append(' 。你在我的代码 event.target 中使用了这个
  • 是的,我检查了每一个步骤并且它正在工作。但我在您的 sn-p 中发现了一个问题,或者可能是我的问题。你也能帮我解决这个问题吗?问题是,我点击了添加合作伙伴按钮并填写了所有信息,但我忘记选择“状态”并直接点击添加银行。现在,如果我从第一行中选择状态,则检查字段位置已更改,请检查 prnt.sc/o949qg,如果我从第二行中选择状态,则显示为 prnt.sc/o94b6x
  • 哦!我非常感谢您的努力和帮助。它运行良好。我想知道 $(document).on('change', '.pp_fileStatus... on Add partner 会从 ID2 开始,之前不解释是我的错。
  • if条件很容易理解:上一行,if第一个。如果在第一个 i-imgset 之后有一个 drug_info 块附加,则在最后附加。你在另一个里面有一个 drug_info 块。在一种情况下,您需要删除兄弟姐妹,在另一种情况下,您需要在添加/插入之前删除最后一个输入包装器......在这种情况下,ID 确实有任何区别。这只是如何找到最佳上下波动模式的问题。 ele[operation] 以这种方式执行 jquery append 或之后:ele.append... 或 ele['append]...
猜你喜欢
  • 1970-01-01
  • 2012-08-12
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 2015-06-16
  • 1970-01-01
相关资源
最近更新 更多