После добавления удалите значение из раскрывающегося меню и покажите следующее значение, также удаленное, добавьте удаленное значение еще раз в раскрывающееся меню. - PullRequest
2 голосов
/ 20 января 2020

В настоящее время я использую описанную ниже процедуру, чтобы добавить месяц и значение в таблицу, используя выпадающее меню и текстовое поле. Мое требование состоит в том, чтобы после добавления данных удалить этот месяц из раскрывающегося меню и показать следующий соответствующий месяц в списке пользователю. Также, если записи были удалены, повторно добавьте эти удаленные значения в выпадающее меню. Пользователь должен отметить записи из таблицы, которую необходимо удалить.

Способ ввода данных

function ftm2add5() {
  var cat = $("#month").val();
  var amt = $("#amt5").val();

  var cate = $("#month option:selected").html();

  if (amt == "") {
    $("#amt5").addClass("red-border");
  } else {

    if ($('#table5 tr:contains("' + cate + '")').length > 0) {
      alert("found duplicate values");
    } else {
      var markup =
        "<tr><td><input type='checkbox'  name='record'></td><td>" +
        cat +
        "</td><td>" +
        amt +
        "</td></tr>";
      $("#table5 tbody").append(markup);

      $("#amt5").val(null);
    }
  }
}


function deleteval(z, a) {

  // Find and remove selected table rows

  $("#" + z + "" + " tbody").find('input[name="record"]').each(function() {
    if ($(this).is(":checked")) {
      $(this).parents("tr").remove();
    }
  });


  $("#" + a + "" + " tbody").find('input[name="record"]').each(function() {
    if ($(this).is(":checked")) {
      $(this).parents("tr").remove();
    }
  });


}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3> Montly Sales </h3>
<select id="month">
  <option value="JAN">JAN</option>
  <option value="FEB">FEB</option>
  <option value="MARCH">MARCH</option>
  <option value="APRIL">APRIL</option>
  <option value="MAY">MAY</option>
  <option value="JUNE">JUNE</option>
  <option value="JULY">JULY</option>
  <option value="AUGUST">AUGUST</option>
</select>
<input type="number" id="amt5" placeholder="Enter amount" />
<input type="button" value="Add Row" onclick="ftm2add5()">
<button type="button" class="btn-danger" id="delete" onclick="deleteval('table5')">Delete Rows</button>
<table id="table5" class="table table-dark" border="1">
  <thead>
    <tr>
      <th>Select</th>
      <th>Month</th>
      <th>T/O Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
    </tr>
  </tbody>
</table>

Ответы [ 2 ]

2 голосов
/ 20 января 2020

Этот ответ одновременно удаляет и повторно добавляет выбранные элементы (убедитесь, что все ответы соответствуют обоим) .

Это так добавив класс hidden - не удаляя опцию SELECT - упростив простую отмену скрытия опции, если строка удалена.

function ftm2add5() {
	var cat = $("#month").val();
	var amt = $("#amt5").val();

	var cate = $("#month option:selected").html();

	if (amt == "") {
		$("#amt5").addClass("red-border");
	} else {

		if ($('#table5 tr:contains("' + cate + '")').length > 0) {
			alert("found duplicate values");
		} else {
			var markup =
				"<tr><td><input type='checkbox'  name='record'></td><td>" +
				cat +
				"</td><td>" +
				amt +
				"</td></tr>";
			$("#table5 tbody").append(markup);

			$("#amt5").val(null);
		}
	}
		$("#month option:selected").addClass('hidden'); //<===== Added
		let nextMonth = $("#month option:selected").next('option').text(); //<===== Added
    $('#month').val(nextMonth);
}


function deleteval(z, a) {

	// Find and remove selected table rows

	$("#" + z + "" + " tbody").find('input[name="record"]').each(function () {
		if ($(this).is(":checked")) {
				let mnth = $(this).parents("tr").find('td:nth-child(2)').text(); // HERE
			$(this).parents("tr").remove();
				$('select option').each(function(){ //<================ HERE
					if ( $(this).val() === mnth ){
						$(this).removeClass('hidden');
					}
				});
		}
	});


	$("#" + a + "" + " tbody").find('input[name="record"]').each(function () {
		if ($(this).is(":checked")) {
			$(this).parents("tr").remove();
		}
	});


}
.hidden{display: none;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3> Montly Sales  </h3>
<select  id="month">
   <option value="JAN">JAN</option>
   <option value="FEB">FEB</option>
   <option value="MARCH">MARCH</option>
   <option value="APRIL">APRIL</option>
   <option value="MAY">MAY</option>
   <option value="JUNE">JUNE</option>
   <option value="JULY">JULY</option>
   <option value="AUGUST">AUGUST</option>
</select>
<input type="number" id="amt5" placeholder ="Enter amount"/>
<input type="button" value="Add Row" onclick="ftm2add5()">
<button type="button" class="btn-danger" id = "delete" onclick="deleteval('table5')" >Delete Rows</button>
<table id="table5" class="table table-dark" border="1">
   <thead>
      <tr>
         <th>Select</th>
         <th>Month</th>
         <th>T/O Value</th>
      </tr>
   </thead>
   <tbody>
      <tr>
      </tr>
   </tbody>
</table>

ОБНОВЛЕНИЕ:

В запросе на комментарий обновлено, чтобы в раскрывающемся списке отображался также «следующий» месяц когда строка добавлена. Есть еще кое-что, что я оставлю в качестве упражнения для ФП. Что произойдет, если пользователь выберет последний месяц? Код не может справиться с этим. Вот как это решить:

  1. Прежде чем получить «следующий» месяц, сначала получите название выбранного месяца (почти такой же код, просто проще).

  2. Затем сравните это с текстом последнего элемента в раскрывающемся меню (начните с жесткого кодирования его до «АВГУСТ», затем, когда у вас это получится, подумайте, что программно)

  3. Если выбранный месяц равен фамилии в раскрывающемся списке, установите в раскрывающемся списке первый параметр (точно такой же, как в моем коде).

Боннский шанс!

1 голос
/ 20 января 2020

Попробуйте это

var selectbox = $("#month").val();

function ftm2add5() {
	var cat = $("#month").val();
	var amt = $("#amt5").val();

	var cate = $("#month option:selected").html();

	if (amt == "") {
		$("#amt5").addClass("red-border");
	} else {

		if ($('#table5 tr:contains("' + cate + '")').length > 0) {
			alert("found duplicate values");
		} else {
			var markup =
				"<tr><td><input type='checkbox'  name='record'></td><td>" +
				cat +
				"</td><td>" +
				amt +
				"</td></tr>";
			$("#table5 tbody").append(markup);

			$("#amt5").val(null);
		}
	}
  $("#month option:selected").remove();
}


function deleteval(z, a) {

	// Find and remove selected table rows

	$("#" + z + "" + " tbody").find('input[name="record"]').each(function () {
		if ($(this).is(":checked")) {
    $("#month").append('<option value="'+selectbox+'">'+selectbox+'</option>');
			$(this).parents("tr").remove();
		}
	});

	$("#" + a + "" + " tbody").find('input[name="record"]').each(function () {
		if ($(this).is(":checked")) {
			$(this).parents("tr").remove();
		}
	});


}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3> Montly Sales  </h3>
<select  id="month">
   <option value="JAN">JAN</option>
   <option value="FEB">FEB</option>
   <option value="MARCH">MARCH</option>
   <option value="APRIL">APRIL</option>
   <option value="MAY">MAY</option>
   <option value="JUNE">JUNE</option>
   <option value="JULY">JULY</option>
   <option value="AUGUST">AUGUST</option>
</select>
<input type="number" id="amt5" placeholder ="Enter amount"/>
<input type="button" value="Add Row" onclick="ftm2add5()">
<button type="button" class="btn-danger" id = "delete" onclick="deleteval('table5')" >Delete Rows</button>
<table id="table5" class="table table-dark" border="1">
   <thead>
      <tr>
         <th>Select</th>
         <th>Month</th>
         <th>T/O Value</th>
      </tr>
   </thead>
   <tbody>
      <tr>
      </tr>
   </tbody>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...