Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.06.2018, 19:17
Интересующийся
Отправить личное сообщение для racheev Посмотреть профиль Найти все сообщения от racheev
 
Регистрация: 29.04.2018
Сообщений: 11

Как найти совпадения из массива в цикле?
Привет всем, не очень я силен в JS но попытался сделать календарь.
С календарем получилось и все работает, а вот найти совпадения какие дни заняты не получается

db['positions'] выводит номер дня например 9-е {d:9}

вот так :
{"today":"09","year":"2018","month":"07","dayofmonth":"31","date":"2018-07","tomonth":"06","toyear":"2018","next":"2018-08","prev":"2018-06","day":"7","positions":[{"d":"10"},{"d":"11"}]}



var db = JSON.parse(result);
var view = db['positions'];
for (i = 1; i <= db['dayofmonth']; i++) {
	/// вычисляем день по счету с какого начинается неделя 
	var d = parseInt(db['day']) + parseInt(i) - parseInt(1);
	/// если сегодня меньше и то не показывать чекбокс
	if (db['today'] >= i && db['month'] <= db['tomonth']) {
		$("#col" + d).html(i + '<br>-');
	} else {
		if (view) {
// как мне заставить следующую конструкцию работать?

			if (i == view[i]['d']) {
//				$("#col" + d).html(i + '<br>-');
				console.log(i);
			}
			else {
//				$("#col" + d).html(i + '<br><input class="check" type="checkbox" name="day_view[]" value="" onclick="clk(this);">');				



			}
		}	
	}
}
Ответить с цитированием
  #2 (permalink)  
Старый 09.06.2018, 19:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

racheev,
<script>
var db = {"today":"09","year":"2018","month":"07","dayofmonth":"31","date":"2018-07","tomonth":"06","toyear":"2018","next":"2018-08","prev":"2018-06","day":"7","positions":[{"d":"10"},{"d":"11"}]};
var view = db['positions'];
var busy = view.map(function(e) {
  return +e.d
});
var length = +db['dayofmonth'];
var today = +db['today'];
for (var i = 0; i < length; i++) {
var num = i + 1;
var html = num + '<br><input class="check" type="checkbox" name="day_view[]" value="" onclick="clk(this);">'
if (busy.indexOf(num) > -1 || num < today ) html = num + '<br>-'
document.write(html+"<br>")
}

  </script>
Ответить с цитированием
  #3 (permalink)  
Старый 09.06.2018, 20:10
Интересующийся
Отправить личное сообщение для racheev Посмотреть профиль Найти все сообщения от racheev
 
Регистрация: 29.04.2018
Сообщений: 11

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

<div id="calendar" align="center">
<table class="tablecall">
	<tr>
		<td>
			<a class="arrow" id="prev" onclick="cal(prev);"> <<< </a>
		</td>
		<td>
<table class="tablecall">
	<tr class="trcall">
		<td colspan="7">Выбираем <span id="date"></span></td>
	</tr>
	<tr class="trcall">
		<td>Пн</td>
		<td>Вт</td>
		<td>Ср</td>
		<td>Чт</td>
		<td>Пт</td>
		<td><font color="red">Сб</font></td>
		<td><font color="red">Вс</font></td>
	</tr>
	<tr class="day">
		<td id="col1"></td>
		<td id="col2"></td>
		<td id="col3"></td>
		<td id="col4"></td>
		<td id="col5"></td>
		<td id="col6"></td>
		<td id="col7"></td>
	</tr>
	<tr class="day">
		<td id="col8"></td>
		<td id="col9"></td>
		<td id="col10"></td>
		<td id="col11"></td>
		<td id="col12"></td>
		<td id="col13"></td>
		<td id="col14"></td>
	</tr>
	<tr class="day">
		<td id="col15"></td>
		<td id="col16"></td>
		<td id="col17"></td>
		<td id="col18"></td>
		<td id="col19"></td>
		<td id="col20"></td>
		<td id="col21"></td>
	</tr>
	<tr class="day" id="week4">
		<td id="col22"></td>
		<td id="col23"></td>
		<td id="col24"></td>
		<td id="col25"></td>
		<td id="col26"></td>
		<td id="col27"></td>
		<td id="col28"></td>
	</tr>
	<tr class="day" id="week5">
		<td id="col29"></td>
		<td id="col30"></td>
		<td id="col31"></td>
		<td id="col32"></td>
		<td id="col33"></td>
		<td id="col34"></td>
		<td id="col35"></td>
	</tr>
	<tr class="day" id="week6">
		<td id="col36"></td>
		<td id="col37"></td>
		<td id="col38"></td>
		<td id="col39"></td>
		<td id="col40"></td>
		<td id="col41"></td>
		<td id="col42"></td>
	</tr>

</table>
	</td>
		<td><a class="arrow" onclick="cal(next);"> >>> </a></td>
	</tr>
</table>
</div>
Ответить с цитированием
  #4 (permalink)  
Старый 09.06.2018, 20:39
Интересующийся
Отправить личное сообщение для racheev Посмотреть профиль Найти все сообщения от racheev
 
Регистрация: 29.04.2018
Сообщений: 11

и переходы на следующий месяц не учтены. там эти же даты с первого по 9-е не активны. у меня все работает, просто подскажите как сделать что бы при совпадении в базе дня у него не показывался чекбокс.
Ответить с цитированием
  #5 (permalink)  
Старый 09.06.2018, 20:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

календарь, вывод месяца из json
racheev,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
    .red{
       border: solid 1px #FF0000;
       border-radius: 2px;
    }

  </style>
</head>

<body>
<div id="calendar" align="center">
<table class="tablecall">
	<tr>
		<td>
			<a class="arrow" id="prev" onclick="cal(prev);"> <<< </a>
		</td>
		<td>
<table class="tablecall">
	<tr class="trcall">
		<td colspan="7">Выбираем <span id="date"></span></td>
	</tr>
	<tr class="trcall">
		<td>Пн</td>
		<td>Вт</td>
		<td>Ср</td>
		<td>Чт</td>
		<td>Пт</td>
		<td><font color="red">Сб</font></td>
		<td><font color="red">Вс</font></td>
	</tr>
	<tr class="day">
		<td id="col1"></td>
		<td id="col2"></td>
		<td id="col3"></td>
		<td id="col4"></td>
		<td id="col5"></td>
		<td id="col6"></td>
		<td id="col7"></td>
	</tr>
	<tr class="day">
		<td id="col8"></td>
		<td id="col9"></td>
		<td id="col10"></td>
		<td id="col11"></td>
		<td id="col12"></td>
		<td id="col13"></td>
		<td id="col14"></td>
	</tr>
	<tr class="day">
		<td id="col15"></td>
		<td id="col16"></td>
		<td id="col17"></td>
		<td id="col18"></td>
		<td id="col19"></td>
		<td id="col20"></td>
		<td id="col21"></td>
	</tr>
	<tr class="day" id="week4">
		<td id="col22"></td>
		<td id="col23"></td>
		<td id="col24"></td>
		<td id="col25"></td>
		<td id="col26"></td>
		<td id="col27"></td>
		<td id="col28"></td>
	</tr>
	<tr class="day" id="week5">
		<td id="col29"></td>
		<td id="col30"></td>
		<td id="col31"></td>
		<td id="col32"></td>
		<td id="col33"></td>
		<td id="col34"></td>
		<td id="col35"></td>
	</tr>
	<tr class="day" id="week6">
		<td id="col36"></td>
		<td id="col37"></td>
		<td id="col38"></td>
		<td id="col39"></td>
		<td id="col40"></td>
		<td id="col41"></td>
		<td id="col42"></td>
	</tr>

</table>
	</td>
		<td><a class="arrow" onclick="cal(next);"> >>> </a></td>
	</tr>
</table>
</div>
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

<script>
var db = {"today":"09","year":"2018","month":"07","dayofmonth":"31","date":"2018-07","tomonth":"06","toyear":"2018","next":"2018-08","prev":"2018-06","day":"7","positions":[{"d":"10"},{"d":"11"}]};
var view = db['positions'];
var busy = view.map(function(e) {
    return +e.d
});
var length = +db['dayofmonth'];
var today = +db['today'];
var day = +db['day'];
for (var i = 0; i < length; i++) {
var num = i + 1;
var html = num + '<br><input class="check" type="checkbox" name="day_view[]" value="" onclick="clk(this);">';
if (busy.indexOf(num) > -1 || num <= today ) html = num + '<br>-';
var id = "#col" + (i + day);
$(id).html(html).toggleClass("red", num == today)
}
 </script>

</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 10.06.2018, 06:37
Интересующийся
Отправить личное сообщение для racheev Посмотреть профиль Найти все сообщения от racheev
 
Регистрация: 29.04.2018
Сообщений: 11

рони,

если приходит пустая positions то календарь не формируется... я добавил проверку. но самое важное что при переходе на следующий месяц не отмечает даты которые заняты.



<script>
$(document).ready( function() {
//	$('#fset_calendar').hide();
});
$('#country_slug').on('change', function() {
	var country_slug = $(this).val();
	if (country_slug) {
		$('#fset_calendar').show();
		cal();
	} else {
		$('#fset_calendar').hide();
	}
});

function cal(dat) {
	
	/// сбрасываем все переменные
	for (i = 1; i <= 42; i++) {
		$("#col" + i).html('');
		$("#week" + i).show();
		$("#prev").show();
	}	
	/// зпросим данные по календарю
	$.ajax({
		type: 'GET',
		url: '/positions/get_calendar',
		data: {
			date: dat
		}
	}).done(function( result ) {
		/// распарсим что пришло
		var db = JSON.parse(result);
/// если db['positions'] пустая календарь не формируется
		if (db['positions']) {
			var view = db['positions'];
		} else {
			var view = ["d","0"];
		}
		console.log(view);

var busy = view.map(function(e) {
    return +e.d
});
var length = +db['dayofmonth'];
var today = +db['today'];
var day = +db['day'];
for (var i = 0; i < length; i++) {
var num = i + 1;
var html = num + '<br><input class="check" type="checkbox" name="day_view[]" value="" onclick="clk(this);">';
if ((busy.indexOf(num) > -1 || num <= today) && db['month'] <= db['tomonth'] ) html = num + '<br>-';
var id = "#col" + (i + day);
$(id).html(html).toggleClass("red", num == today)
}
		
				


//alert();



		$("#date").html(db['date'] + '<input type="hidden" name="date_show[]" value="'+ db['date'] +'">');
		/// соберем календарь
		
		/*
			for (i = 1; i <= db['dayofmonth']; i++) {
			/// вычисляем день по счету с какого начинается неделя 
			var d = parseInt(db['day']) + parseInt(i) - parseInt(1);
			/// если сегодня меньше и то не показывать чекбокс
			if (db['today'] >= i && db['month'] <= db['tomonth']) {
				$("#col" + d).html(i + '<br>-');
			} else {
				if (view) {
//					if (i === view[0]['d']) {
//						console.log(view[0]['d']);
//					}
					//for(k=0; k < view.length; k++) {
						//if (view[i] == i) {
							
							//console.log(i);
						//}
						//else {
							
						//}	
					//}
				}

				//if (view[i] == i) {
				//	$("#col" + d).html(i + '<br>-');
				//} else {
					$("#col" + d).html(i + '<br><input class="check" type="checkbox" name="date_show[]" value="'+ i +'" onclick="clk(this);">');
				//}

				
				
				
					
				
				
				
				
			}
		}
		*/
		/// вычислим сколько недель и спрячем ненужное
//		var a = Math.ceil(parseInt(d) / 7);
//		if (a == '5') {$("#week6").hide();}
//		if (a == '4') {$("#week5").hide();$("#week6").hide();}
//		if (db['month'] <= db['tomonth']) {$("#prev").hide();}
		/// ссылки на переход туда сюда
		next = db['next'];
		prev = db['prev'];
		today = db['today'];
	});
}

cal();
</script>
<div id="calendar" align="center">
<table class="tablecall">
	<tr>
		<td>
			<a class="arrow" id="prev" onclick="cal(prev);"> <<< </a>
		</td>
		<td>
<table class="tablecall">
	<tr class="trcall">
		<td colspan="7">Выбираем <span id="date"></span></td>
	</tr>
	<tr class="trcall">
		<td>Пн</td>
		<td>Вт</td>
		<td>Ср</td>
		<td>Чт</td>
		<td>Пт</td>
		<td><font color="red">Сб</font></td>
		<td><font color="red">Вс</font></td>
	</tr>
	<tr class="day">
		<td id="col1"></td>
		<td id="col2"></td>
		<td id="col3"></td>
		<td id="col4"></td>
		<td id="col5"></td>
		<td id="col6"></td>
		<td id="col7"></td>
	</tr>
	<tr class="day">
		<td id="col8"></td>
		<td id="col9"></td>
		<td id="col10"></td>
		<td id="col11"></td>
		<td id="col12"></td>
		<td id="col13"></td>
		<td id="col14"></td>
	</tr>
	<tr class="day">
		<td id="col15"></td>
		<td id="col16"></td>
		<td id="col17"></td>
		<td id="col18"></td>
		<td id="col19"></td>
		<td id="col20"></td>
		<td id="col21"></td>
	</tr>
	<tr class="day" id="week4">
		<td id="col22"></td>
		<td id="col23"></td>
		<td id="col24"></td>
		<td id="col25"></td>
		<td id="col26"></td>
		<td id="col27"></td>
		<td id="col28"></td>
	</tr>
	<tr class="day" id="week5">
		<td id="col29"></td>
		<td id="col30"></td>
		<td id="col31"></td>
		<td id="col32"></td>
		<td id="col33"></td>
		<td id="col34"></td>
		<td id="col35"></td>
	</tr>
	<tr class="day" id="week6">
		<td id="col36"></td>
		<td id="col37"></td>
		<td id="col38"></td>
		<td id="col39"></td>
		<td id="col40"></td>
		<td id="col41"></td>
		<td id="col42"></td>
	</tr>

</table>
	</td>
		<td><a class="arrow" onclick="cal(next);"> >>> </a></td>
	</tr>
</table>
</div>
Ответить с цитированием
  #7 (permalink)  
Старый 10.06.2018, 08:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

racheev,
Datepicker
Ответить с цитированием
  #8 (permalink)  
Старый 10.06.2018, 11:52
Интересующийся
Отправить личное сообщение для racheev Посмотреть профиль Найти все сообщения от racheev
 
Регистрация: 29.04.2018
Сообщений: 11

рони,
не прокатит. я знаю эти пикеры. там заморочек еще больше. У меня все работает только одно не могу сделать проверку на совпадение. вот и прощу помощи.
Ответить с цитированием
  #9 (permalink)  
Старый 10.06.2018, 12:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Сообщение от racheev
не могу сделать проверку на совпадение.
чем вас indexOf не устраивает?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в цикле for переходить к следующей итерации после завершения предыдущей? FRIE jQuery 5 30.07.2014 19:03
Подскажите как сравнить первые элементы многомерного массива? yloboda Элементы интерфейса 3 08.06.2014 15:00
Как сформировать строку из массива di@mond Я не знаю javascript 9 11.06.2009 17:35
как найти нужный объект? `p r o x y jQuery 2 05.05.2009 01:12
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53