Как удалить повторяющиеся записи из полей ввода в javascript

$(document).ready(function(){
         $('td:even').css('background-color', 'limegreen');
		 $('td:odd').css('background-color', 'blue');
		  
		//iterate through each textboxes and add keyup
		//handler to trigger sum event
		$(".txt").each(function() {
			 
			$(this).change(function(){
				
				calculateSum();
				checkduplicate();
				
				
			});
		});

	});
	function calculateSum() {
		var sum = 0;
		//iterate through each textboxes and add the values
		$(".txt").each(function() {
			//add only if the value is number
			if (!isNaN(this.value) && this.value.length!=0) {
				sum += parseFloat(this.value);
			}
		});
		//.toFixed() method will roundoff the final sum to 2 decimal places
		$("#sum").html(sum.toFixed(2));
		
	}

    function checkduplicate(){
	var sum = 0;
  var arr = [];
  var all = document.querySelectorAll('input[type=txt]');
  all.forEach(function(el){
    arr.push(el.value);
    sum += +el.value;
console.info(arr);
console.info(sum);
    var c = arr.filter(i =>i==el.value).length;
    if (c>1){
      var dupe = [...all].filter(e => e.value==el.value);
      dupe.forEach(function(d){
        if (d.value.trim() != ''){
          d.style.border = '5px solid red';
          d.style.color = 'red';
          document.body.style.backgroundColor = "red";
        }
      });
    }
    });
  	}		
	$(document).ready(function(){
		$('#btnClear').click(function(){				
			if (confirm("Want to clear?")){

				/*Clear all input type = "text" box*/
				$('#sumtable input[type = "txt"]').val(" ");
				/*Reset sum to zero*/
			     $("span").html("0");
				 document.body.style.backgroundColor = "white";
				 location.reload();
	             $('td:even').css('background-color', 'limegreen');
		        $('td:odd').css('background-color', 'blue');
				$(document).ready(function(){
         $('td:even').css('background-color', 'limegreen');
		 $('td:odd').css('background-color', 'blue');
		//iterate through each textboxes and add keyup
		//handler to trigger sum event
		$(".txt").each(function() {

			$(this).change(function(){
				calculateSum();
				checkduplicate();
				 location.reload();
	             $('td:even').css('background-color', 'limegreen');
		        $('td:odd').css('background-color', 'blue');
				/*Clear all input type = "text" box*/
				$('#sumtable input[type = "txt"]').val(" ");
				/*Reset sum to zero*/
			     $("span").html("0");
				 document.body.style.backgroundColor = "white";
				
			});
		});

	});
				
			}					
		});
	});
body {
	
				font-family: sans-serif;
			}
			#summation {
				font-size: 18px;
				font-weight: bold;
				color:#174C68;
			}
			.txt {
				background-color: #FEFFB0;
				font-weight: bold;
				text-align: right;
				
			}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<meta charset = "utf-8"/>
<head>
<!--<script src = "jquery-3.3.1.min.js"></script>-->
<script src = "/home/cybrosys/Sethu/JS/jquery-3.3.1.min.js"></script>
<script src = "sumbox.js"></script>
 <link rel = "stylesheet" href = "sumbox.css" type = "txt/css">
</head>
<body>
<table  border = "2" align = "center" id = "sumtable">
 <tbody>
        <tr>
          <td><input type = "txt" class = "txt"   name = "txt"    id = "qty1" class = "form-control alldifferent"></td>
          <td><input type = "txt" class = "txt"   name = "txt"    id = "qty2" class = "form-control alldifferent"></td>
          <td><input type = "txt"class = "txt"    name = "txt"    id = "qty3" class = "form-control alldifferent" ></td>
        </tr>
        <tr>
          <td><input type = "txt" class = "txt"     name = "txt"  id = "qty4" class = "form-control alldifferent" ></td>
          <td><input type = "txt" class = "txt"   name = "txt"    id = "qty5"  class = "form-control alldifferent"></td>
          <td><input type = "txt" class = "txt"   name = "txt"    id = "qty6" class = "form-control alldifferent" ></td>
        </tr>
        <tr>
          <td><input type = "txt" class = "txt"   name = "txt"    id = "qty7" class = "form-control alldifferent" ></td>
          <td><input type = "txt"class = "txt"     name = "txt"   id = "qty8"  class = "form-control alldifferent"></td>
          <td><input type = "txt" class = "txt"    name = "txt"   id = "qty9"  class = "form-control alldifferent"></td>
        </tr>
        </tbody>
		</table>
<div align = "center" >
	<tr id = "summation"><br>
		<td align = "center">Sum :</td>
		<td align = "center"><span id = "sum">0</span></td></tr>
		</div>
		<td>&nbsp;</td>
		<div align = "center">
         <tr><td><button type = "button" id = "btnClear" value = "reset"/>Reset</td></tr>
</div>
	</tr>
</body>
</html>

Я не могу удалить повторяющиеся записи из полей ввода и автофокус в этих полях ввода. Также, когда я нажимаю кнопку сброса, генерируется сумма Nan.

У меня есть 9 полей ввода, где пользователь может вводить значения. После ввода значений генерируется сумма. Когда пользователь вводит повторяющиеся значения, эти записи выделяются красным цветом, и фон также становится красным.

Я пытаюсь удалить повторяющиеся записи и автофокус в этих полях. После сброса суммы до нуля и полей ввода до нуля. При повторном вводе значений сгенерированная сумма равна NaN. Как решить эти две проблемы?

вы должны генерировать сумму значений, когда вы нажимаете кнопку сброса, это правильно или нет?

Jacky 01.02.2019 06:37

Я не думаю, что вы можете сфокусировать несколько полей одновременно

chiliNUT 01.02.2019 06:39

при нажатии кнопки сброса значение суммы и поля ввода обнуляются. Затем при изменении ключа должна быть сгенерирована сумма значений.

Sethu 01.02.2019 06:39

<button type = "reset" id = "btnClear" value = "reset"/>Reset</td></tr> измените тип на "reset", это сбросит значение

Jacky 01.02.2019 06:41

@ chiliNut.... не нужно сосредотачиваться на нескольких полях одновременно. при изменении ключа мы вводим значения в поля ввода, при этом, если обнаруживаются повторяющиеся значения, они должны быть удалены и автоматически фокусироваться на соответствующем поле.

Sethu 01.02.2019 06:41

@tom ... да, это сбрасывает значение. но после нажатия кнопки сброса и ввода значений в поля сгенерированная сумма равна NaN. значение суммы должно быть сгенерировано при вводе значений в поля ввода.

Sethu 01.02.2019 06:44

это три ряда зафиксированы? или динамически изменены

Jacky 01.02.2019 06:47

Извини, что не понял тебя, Том. Строки фиксированы, значения внутри полей не фиксированы

Sethu 01.02.2019 06:48

в таблице у вас 3 строки исправлено? или добавление дополнительных строк

Jacky 01.02.2019 06:49

Исправлены 3 строки, не добавляя их

Sethu 01.02.2019 06:50

все значения во всех столбцах должны быть взяты для выполнения суммы. Сумма генерируется внизу таблицы.

Sethu 01.02.2019 06:55

K подожди .. есть какая-нибудь рабочий пример

Jacky 01.02.2019 06:58

@том нет у меня их нет

Sethu 01.02.2019 06:59

Попробуйте прослушиватель действий, чтобы вычислить сумму для всего текста

Jacky 01.02.2019 07:14

Давайте продолжить обсуждение в чате.

Jacky 01.02.2019 07:19

Он уже вычисляет сумму, используя событие изменения. Но после нажатия кнопки сброса сумма, сгенерированная при вводе значений, равна nan

Sethu 01.02.2019 07:20
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
16
114
1

Ответы 1

При суммировании нужно изменить цвет и добавить d.focus();. Попробуй это:

$(document).ready(function(){
         $('td:even').css('background-color', 'limegreen');
		 $('td:odd').css('background-color', 'blue');
		  
		//iterate through each textboxes and add keyup
		//handler to trigger sum event
		$(".txt").each(function() {
			 
			$(this).change(function(){
				
				calculateSum();
				checkduplicate();
				
				
			});
		});

	});
var sum = 0;
	function calculateSum() {
		sum = 0;
		//iterate through each textboxes and add the values
		$(".txt").each(function() {
			//add only if the value is number
			if (!isNaN(this.value) && this.value.length!=0) {
				sum += parseFloat(this.value);
 this.style.color ='limegreen';
        $('td:even').css('background-color', 'limegreen');
		        $('td:odd').css('background-color', 'blue');
            this.style.border = 'limegreen';
			}
		});
		//.toFixed() method will roundoff the final sum to 2 decimal places
		$("#sum").html(sum.toFixed(2));
		
	}

    function checkduplicate(){
	var check=0;
  var arr = [];
  var all = document.querySelectorAll('input[type=txt]');
  all.forEach(function(el){
    arr.push(el.value);
    sum += +el.value;
   // console.info(arr);
//console.info(sum);
    var c = arr.filter(i =>i==el.value).length;
    if (c>1){
      var dupe = [...all].filter(e => e.value==el.value);
       check=0;
      dupe.forEach(function(d){
        if (d.value.trim() != ''){
        if (check==0){
        check=1;
        }else{
          d.style.border = '5px solid red';
          d.style.color = 'red';
          d.value = "";
          d.focus();}
       
          document.body.style.backgroundColor = "red";
        }
else{
 d.style.color ='limegreen';
 $('td:even').css('background-color', 'limegreen');
		        $('td:odd').css('background-color', 'blue');
  document.body.style.backgroundColor = "white";
}
      });
    }
    });
  	}		
	$(document).ready(function(){
		$('#btnClear').click(function(){				
			if (confirm("Want to clear?")){

				/*Clear all input type = "text" box*/
				$('#sumtable input[type = "txt"]').val(" ");
				/*Reset sum to zero*/
			     $("span").html("0");
				 document.body.style.backgroundColor = "white";
				setTimeout(function(){
  window.location.reload(true);
});
	             $('td:even').css('background-color', 'limegreen');
		        $('td:odd').css('background-color', 'blue');
				$(document).ready(function(){
         $('td:even').css('background-color', 'limegreen');
		 $('td:odd').css('background-color', 'blue');
		//iterate through each textboxes and add keyup
		//handler to trigger sum event
		$(".txt").each(function() {

			$(this).change(function(){
				calculateSum();
				checkduplicate();
							setTimeout(function(){
  window.location.reload(true);
});
	             $('td:even').css('background-color', 'limegreen');
		        $('td:odd').css('background-color', 'blue');
				/*Clear all input type = "text" box*/
				$('#sumtable input[type = "txt"]').val(" ");
				/*Reset sum to zero*/
			     $("span").html("0");
				 document.body.style.backgroundColor = "white";
				
			});
		});

	});
				
			}					
		});
	});
body {
	
				font-family: sans-serif;
			}
			#summation {
				font-size: 18px;
				font-weight: bold;
				color:#174C68;
			}
			.txt {
				background-color: #FEFFB0;
				font-weight: bold;
				text-align: right;
				
			}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<meta charset = "utf-8"/>
<head>
<!--<script src = "jquery-3.3.1.min.js"></script>-->
<script src = "/home/cybrosys/Sethu/JS/jquery-3.3.1.min.js"></script>
<script src = "sumbox.js"></script>
 <link rel = "stylesheet" href = "sumbox.css" type = "txt/css">
</head>
<body>
<table  border = "2" align = "center" id = "sumtable">
 <tbody>
        <tr>
          <td><input type = "txt" class = "txt"   name = "txt"    id = "qty1" class = "form-control alldifferent"></td>
          <td><input type = "txt" class = "txt"   name = "txt"    id = "qty2" class = "form-control alldifferent"></td>
          <td><input type = "txt"class = "txt"    name = "txt"    id = "qty3" class = "form-control alldifferent" ></td>
        </tr>
        <tr>
          <td><input type = "txt" class = "txt"     name = "txt"  id = "qty4" class = "form-control alldifferent" ></td>
          <td><input type = "txt" class = "txt"   name = "txt"    id = "qty5"  class = "form-control alldifferent"></td>
          <td><input type = "txt" class = "txt"   name = "txt"    id = "qty6" class = "form-control alldifferent" ></td>
        </tr>
        <tr>
          <td><input type = "txt" class = "txt"   name = "txt"    id = "qty7" class = "form-control alldifferent" ></td>
          <td><input type = "txt"class = "txt"     name = "txt"   id = "qty8"  class = "form-control alldifferent"></td>
          <td><input type = "txt" class = "txt"    name = "txt"   id = "qty9"  class = "form-control alldifferent"></td>
        </tr>
        </tbody>
		</table>
<div align = "center" >
	<tr id = "summation"><br>
		<td align = "center">Sum :</td>
		<td align = "center"><span id = "sum">0</span></td></tr>
		</div>
		<td>&nbsp;</td>
		<div align = "center">
         <tr><td><button type = "button" id = "btnClear" value = "reset"/>Reset</td></tr>
</div>
	</tr>
</body>
</html>

Для FireFox используйте location.reload(true);

привет @i_th, сумма после сброса полей ввода равна NaN. и я не могу удалить повторяющиеся записи и автоматически сфокусироваться на них

Sethu 01.02.2019 10:20

@Sethu, как это может быть. Я пробовал, и это работает, или я не понял вашу точку зрения. попробуйте использовать другой браузер.

I_Al-thamary 01.02.2019 10:24

я использую мозиллу фаерфокс. Я запустил отредактированный фрагмент и попытался решить ту же проблему.

Sethu 01.02.2019 10:27

@Sethu попробуйте использовать Chrome, и если он не работает, укажите свою проблему.

I_Al-thamary 01.02.2019 10:29

но независимо от браузера он должен работать правильно?

Sethu 01.02.2019 10:39

как удалить повторяющиеся записи из полей ввода?

Sethu 04.02.2019 04:33

Я попытался указать d.value='' , но он очищает предыдущее значение при обнаружении повторяющихся записей одного и того же.

Sethu 04.02.2019 04:36

@i_th... как удалить повторяющиеся записи из полей ввода

Sethu 04.02.2019 05:04

@Sethu, проверь это сейчас.

I_Al-thamary 04.02.2019 09:32

@Sethu попробуйте сейчас, он удаляет только дубликаты, потому что вы не ставите check ==0

I_Al-thamary 04.02.2019 10:12

sry i_th за ответ ... все правильно в браузере chrome, но не работает в mozilla

Sethu 04.02.2019 10:14

@Sethu Для FireFox используйте location.reload(true); вместо location.reload();, это работает.

I_Al-thamary 04.02.2019 10:17

@Sethu Я не знаю, что ты имеешь в виду.

I_Al-thamary 04.02.2019 11:25

Другие вопросы по теме

Применить алгоритм по умолчанию array.sort() к строковым свойствам объектов в массиве
Сгенерировать URL-адрес на основе строки с регулярным выражением в JS
Для завершения цикла после первой итерации
Как отправить реквизит с компонентом реквизита реагировать
Как установить правила безопасности в Cloud Firestore, чтобы вошедший в систему пользователь мог читать только те документы, которые ОНИ опубликовали?
Скрыть кнопку удаления <span> и удалить <li> при нажатии JavaScript
Переключите текст внутри блока div справа на блок div слева и наоборот, нажимая кнопки
Mongoose сохраняет пустую ошибку массива «TypeError: невозможно прочитать свойство« 1 »от null»
Прочитайте конкретное значение в файле XML в javascript и верните все значения в одной строке
Как мне сделать счетчик для проверки, сколько раз веб-страница перезагружается пользователем с помощью java-скрипта?