Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   classList.remove() не удаляет класс (https://javascript.ru/forum/events/73417-classlist-remove-ne-udalyaet-klass.html)

AnthonyFink 14.04.2018 13:37

classList.remove() не удаляет класс
 
что делаю не так ?
newNote();
function saveToDo(){
	// take date of new note
	var date = new Date()
	// take note
	var getId = date.getTime();
	var getNote = document.getElementById('todobox').value;
	var futureDate = document.getElementById('future_date').value;
	var errorMessage = document.getElementById('error_message');
	// validation for empty textarea

	if (getNote === "") {
		errorMessage.innerText = 'You must write something in description';
		errorMessage.classList.remove("error_text");
        return false;
        }else if(futureDate === ""){
        errorMessage.innerText = 'You must write date';
        errorMessage.classList.remove("error_text");
        return false;
        }

рони 14.04.2018 13:39

AnthonyFink,
где минимальный код, с этой проблемой?

AnthonyFink 14.04.2018 13:51

https://yadi.sk/d/ED0sR-Av3UQWbi

AnthonyFink 14.04.2018 13:52

Цитата:

Сообщение от AnthonyFink (Сообщение 483242)

19 и 14 строки кода

рони 14.04.2018 14:24

Цитата:

Сообщение от AnthonyFink
19 и 14 строки кода

работает всё, а вот парсинг localStorage не учитывает отсутстие todolist
вы сами запретили это делать своими return false; в строках 15 и 19 пост 1
поэтому до if (localStorage.getItem('todolist') == null) дело не доходит.

и в функции newNote возникает ошибка
можно исправить так
function newNote(){
var newNoteList = JSON.parse(localStorage.getItem('todolist'))||[];
но это не отменяет проблему с логикой в функции saveToDo()

AnthonyFink 14.04.2018 14:38

ок но проббемму мне это не решает

рони 14.04.2018 14:44

AnthonyFink,
пробуйте, и пишите в чём проблема?
newNote();
function saveToDo(){
	// take date of new note
	var date = new Date()
	// take note
	var getId = date.getTime();
	var getNote = document.getElementById('todobox').value;
	var futureDate = document.getElementById('future_date').value;
	var errorMessage = document.getElementById('error_message');
    errorMessage.classList.add("error_text");
	// validation for empty textarea

	if (getNote === "") {
		errorMessage.innerText = 'You must write something in description';
		errorMessage.classList.remove("error_text");
		document.getElementById('todobox').focus();
        return false;
        }else if(futureDate === ""){
        errorMessage.classList.add("error_text");
        errorMessage.innerText = 'You must write date';
        errorMessage.classList.remove("error_text");
        document.getElementById('future_date').focus();
        return false;
        }

   function validateDate(date) {
	            var str = date.trim().split("/");
    if (str.length == 3) {
        str = new Date(str[2], str[1] - 1, str[0], 0, 0, 0);
        if (str == 'Invalid Date') return false;
        str = [ ("0" + str.getDate()).substr(-2), ("0" + (str.getMonth() + 1)).substr(-2),str.getFullYear()].join("/");
        return str === date.trim()
    }
    return false

		 }
		 if (!validateDate(futureDate)) {
		 	errorMessage.innerText = 'You must write correct date'
	         errorMessage.classList.remove("error_text");
	         return false;
		 }
	var toDo = {id: getId, toDo: getNote, date: futureDate}
if (localStorage.getItem('todolist') == null){
	var to_do_list = [];
	to_do_list.push(toDo);
	localStorage.setItem('todolist', JSON.stringify(to_do_list));
}
else{
var to_do_list = JSON.parse(localStorage.getItem('todolist'));
	to_do_list.push(toDo);
	localStorage.setItem('todolist', JSON.stringify(to_do_list));
	}
 document.getElementById('todolist').reset();
 newNote();
}
// save note
function newNote(){
var newNoteList = JSON.parse(localStorage.getItem('todolist'))||[];
noteboard.innerHTML = '';
for(var i = 0; i <newNoteList.length; i++){
	var id = newNoteList[i].id;
	var toDoText = newNoteList[i].toDo;
	var myDate = new Date(id).toLocaleString();
	noteboard.innerHTML += '<div class="col-md-2 delete">' + '<span class="remove" onclick="deleteToDo(\''+id+'\')">'+ '<i class="far fa-trash-alt"></i>'+'</span>' +'<div id="text">'+ toDoText +'</div>'+ '<span class="date">'+ myDate +'</span>'+'</div>';
}
}

// delete notes
function deleteToDo(id){
var delete_to_do = JSON.parse(localStorage.getItem('todolist'));
for (var i = 0; i < delete_to_do.length; i++) {
	if (delete_to_do[i].id == id){
		delete_to_do.splice(i,1);
	}
}localStorage.setItem('todolist', JSON.stringify(delete_to_do));
		newNote();

}

AnthonyFink 14.04.2018 14:57

Цитата:

Сообщение от рони (Сообщение 483246)
AnthonyFink,
пробуйте, и пишите в чём проблема?
//    function validateDate() {
	 //  			var reg = /^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})$/;
	 //  			if (futureDate.match(reg)) {
	 //    		return true;
	 //  			}
	 //  		return false;
		// }
		// if (futureDate != validateDate()) {
		// 	errorMessage.innerText = 'You must write correct date'
	 //        errorMessage.classList.remove("error_text");
	 //        return false;
		// }

вот тут где у меня ошибка в проверке ?

AnthonyFink 14.04.2018 15:26

Цитата:

Сообщение от рони (Сообщение 483248)
AnthonyFink,
смотрите пост №7 снова

большое спасибо. если я ввожу дату 99/99/9999 она впринципи проходит на ура как в regex я ограничеваю дэйс до 31 и месяцы до 12 ?

рони 14.04.2018 15:49

AnthonyFink,
Валидация даты

AnthonyFink 14.04.2018 17:16

Цитата:

Сообщение от AnthonyFink (Сообщение 483249)
большое спасибо. если я ввожу дату 99/99/9999 она впринципи проходит на ура как в regex я ограничеваю дэйс до 31 и месяцы до 12 ?

if (!validateDate()) {
errorMessage.innerText = 'You must write correct date'
errorMessage.classList.remove("error_text");
return false;
}else
// validate future date
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!

var yyyy = today.getFullYear();
if(dd<10){
dd='0'+dd;
}
if(mm<10){
mm='0'+mm;
}
var today = dd+'/'+mm+'/'+yyyy;

if (futureDate < today) {
errorMessage.innerText = 'You must write date in the future'
errorMessage.classList.remove("error_text");
return false;
};
убрал задние числа но как избавиться от 99/99/9999 которое проходит

рони 14.04.2018 18:17

AnthonyFink,
смотрите пост №7 снова

AnthonyFink 14.04.2018 18:51

Цитата:

Сообщение от рони (Сообщение 483257)
AnthonyFink,
смотрите пост №7 снова

Рони тут я уже совсем запутался и прошедшие даты у меня не получается заблокировать и они проходят
function validateDate(date) {
	var str = date.trim().split("/");
    	if (str.length == 3) {
        	str = new Date(str[2], str[1] - 1, str[0], 0, 0, 0);
        if (str == 'Invalid Date') return false;
        	str = [ ("0" + str.getDate()).substr(-2), ("0" + (str.getMonth() + 1)).substr(-2),str.getFullYear()].join("/");
        return str === date.trim()
    }
    return false

вот эта часть кода мне не совсем понятна

И большое спасибо за терпение и объяснение

рони 14.04.2018 18:57

AnthonyFink,
строка 5
if (str == 'Invalid Date' || str.getTime() < (new Date()).getTime()) return false;

AnthonyFink 14.04.2018 19:18

Цитата:

Сообщение от рони (Сообщение 483264)
AnthonyFink,
строка 5
if (str == 'Invalid Date' || str.getTime() < (new Date()).getTime()) return false;

Спасибо большое Рони !!!! Вы Человек с большой буквы =)


Часовой пояс GMT +3, время: 14:41.