09.06.2018, 19:17
|
Интересующийся
|
|
Регистрация: 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);">');
}
}
}
}
|
|
09.06.2018, 19:43
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
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>
|
|
09.06.2018, 20:10
|
Интересующийся
|
|
Регистрация: 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>
|
|
09.06.2018, 20:39
|
Интересующийся
|
|
Регистрация: 29.04.2018
Сообщений: 11
|
|
и переходы на следующий месяц не учтены. там эти же даты с первого по 9-е не активны. у меня все работает, просто подскажите как сделать что бы при совпадении в базе дня у него не показывался чекбокс.
|
|
09.06.2018, 20:47
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
календарь, вывод месяца из 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>
|
|
10.06.2018, 06:37
|
Интересующийся
|
|
Регистрация: 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>
|
|
10.06.2018, 08:21
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
|
|
10.06.2018, 11:52
|
Интересующийся
|
|
Регистрация: 29.04.2018
Сообщений: 11
|
|
рони,
не прокатит. я знаю эти пикеры. там заморочек еще больше. У меня все работает только одно не могу сделать проверку на совпадение. вот и прощу помощи.
|
|
10.06.2018, 12:03
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
Сообщение от racheev
|
не могу сделать проверку на совпадение.
|
чем вас indexOf не устраивает?
|
|
|
|