Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.11.2019, 16:53
Профессор
Отправить личное сообщение для Igorsrt Посмотреть профиль Найти все сообщения от Igorsrt
 
Регистрация: 21.02.2016
Сообщений: 271

Datepicker - динамическое изменение нерабочих дней
Здравствуйте!
Есть список сотрудников. И есть некая форма с календарем в ней.
Нужно, что бы при клике на сотрудника, в календаре отображались именно его выходные.
<!DOCTYPE html>
<html lang="ru">
	<head>
		<meta charset="utf-8">
		<title>Тест</title>
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<style>
		</style>
	</head>
	<body>
		<a href="#contact_new" data-doctor="Иванов" data-rest="day != 1 && day !=3 && day !=5">Иванов</a>
		<a href="#contact_new" data-doctor="Петров" data-rest="day != 2 && day !=5">Петров</a>
		<a href="#contact_new" data-doctor="Сидоров" data-rest="day != 4 && day !=0">Сидоров</a>
		<form id="contact_new">
			<div class="datepicker" id="datepicker"></div>
			<input type="text" name="datepicker" class="input-page" autocomplete="off">
			<input type="text" class="docname" name="docname" readonly>
		</form>
		
		<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
		<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
		<script>
			$(document).ready(function() {
				var datepicker =  $('#datepicker');
				datepicker.datepicker({
					firstDay: 1,
					beforeShowDay: function(date) {
						var day = date.getDay();
						return [(day != 6 && day !=0), ''];
					},        
					autoSize: true,
					minDate: 0,
					dateFormat: 'dd.mm.yy',
					monthNames : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
					dayNamesMin : ['вс','пн','вт','ср','чт','пт','сб'],
					onSelect: function(dateText, inst) {
						$("input[name='datepicker']").val(dateText);
					},
				});
				var datepic = datepicker.datepicker("getDate");
				$("input[name='datepicker']").val($.datepicker.formatDate("dd.mm.yy", datepic));
				$("input[name='datepicker']").on('keyup', function() {
					var valInp = $(this).val();
					datepicker.datepicker( "setDate", valInp);
				});
			});
		</script>
		<!-- другие скрипты -->
		<script>
			$(function(){
				
				$("a[href='#contact_new']").click(function(){
					$("#contact_new .docname").val($(this).data("doctor"));
					return true;
				});
				
			});
		</script>
	</body>
</html>


data-rest="day != 1 && day !=3 && day !=5" - это как раз список выходных (можно и по другому этот список представить, главное что бы сработало)

Последний раз редактировалось Igorsrt, 01.11.2019 в 23:54.
Ответить с цитированием
  #2 (permalink)  
Старый 02.11.2019, 00:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Igorsrt,
<!DOCTYPE html>
<html lang="ru">
    <head>
        <meta charset="utf-8">
        <title>Тест</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <style>
        </style>
    </head>
    <body>
        <a href="#contact_new" data-doctor="Иванов" data-rest="day != 1 && day !=3 && day !=5">Иванов</a>
        <a href="#contact_new" data-doctor="Петров" data-rest="day != 2 && day !=5">Петров</a>
        <a href="#contact_new" data-doctor="Сидоров" data-rest="day != 4 && day !=0">Сидоров</a>
        <form id="contact_new">
            <div class="datepicker" id="datepicker"></div>
            <input type="text" name="datepicker" class="input-page" autocomplete="off">
            <input type="text" class="docname" name="docname" readonly>
        </form>
        <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
        <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
        <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
        <script>
            $(document).ready(function() {
                var datepicker =  $('#datepicker');
                datepicker.datepicker({
                    firstDay: 1,
                    beforeShowDay: function(date) {
                        var day = date.getDay();
                        return [(day != 6 && day !=0), ''];
                    },
                    autoSize: true,
                    minDate: 0,
                    dateFormat: 'dd.mm.yy',
                    monthNames : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
                    dayNamesMin : ['вс','пн','вт','ср','чт','пт','сб'],
                    onSelect: function(dateText, inst) {
                        $("input[name='datepicker']").val(dateText);
                    },
                });
                var datepic = datepicker.datepicker("getDate");
                $("input[name='datepicker']").val($.datepicker.formatDate("dd.mm.yy", datepic));
                $("input[name='datepicker']").on('keyup', function() {
                    var valInp = $(this).val();
                    datepicker.datepicker( "setDate", valInp);
                });
            });
        </script>
        <!-- другие скрипты -->
        <script>
            $(function(){

                $("a[href='#contact_new']").click(function(){
                    $("#contact_new .docname").val($(this).data("doctor"));
                    var rest  = $(this).data("rest");
                    var fn = new Function('date', `var day = date.getDay();
                        return [${rest}, '']`)
                    $('#datepicker').datepicker( "option", "beforeShowDay", fn );
                    return true;
                });

            });
        </script>
    </body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 02.11.2019, 09:24
Профессор
Отправить личное сообщение для Igorsrt Посмотреть профиль Найти все сообщения от Igorsrt
 
Регистрация: 21.02.2016
Сообщений: 271

Да, это именно то что нужно, Супер. Спасибо!
Ответить с цитированием
  #4 (permalink)  
Старый 02.11.2019, 10:10
Профессор
Отправить личное сообщение для Igorsrt Посмотреть профиль Найти все сообщения от Igorsrt
 
Регистрация: 21.02.2016
Сообщений: 271

только еще один момент: вот этот параметр (data-rest="day != 1 && day !=3 && day !=5") есть пока далеко не у всех - нужна проверка на его существование в функции
Ответить с цитированием
  #5 (permalink)  
Старый 02.11.2019, 10:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Igorsrt,
var rest  = $(this).data("rest");
if(!rest) return;
Ответить с цитированием
  #6 (permalink)  
Старый 02.11.2019, 11:41
Профессор
Отправить личное сообщение для Igorsrt Посмотреть профиль Найти все сообщения от Igorsrt
 
Регистрация: 21.02.2016
Сообщений: 271

Спасибо.
...Теперь пытаюсь все это дело на сайт свой перенести - в консоли выдает "Uncaught SyntaxError: Unexpected identifier" и не работает функция.. в чем может быть причина?
Ответить с цитированием
  #7 (permalink)  
Старый 02.11.2019, 12:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Igorsrt,
может ` это не нравится, тогда замените на обычные кавычки и + rest+
Ответить с цитированием
  #8 (permalink)  
Старый 02.11.2019, 12:40
Профессор
Отправить личное сообщение для Igorsrt Посмотреть профиль Найти все сообщения от Igorsrt
 
Регистрация: 21.02.2016
Сообщений: 271

подозревал, что это из-за символа ` (потому что MODX его в своих целях использует... заменил - не помогает ((
https://drive.google.com/file/d/1NT7...ew?usp=sharing
Ответить с цитированием
  #9 (permalink)  
Старый 02.11.2019, 13:14
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от Igorsrt
заменил
Ответить с цитированием
  #10 (permalink)  
Старый 02.11.2019, 13:15
Профессор
Отправить личное сообщение для Igorsrt Посмотреть профиль Найти все сообщения от Igorsrt
 
Регистрация: 21.02.2016
Сообщений: 271

вот так?
var fn = new Function('date', "var day = date.getDay();
                        return [${+rest+}, '']")

так не работает

Последний раз редактировалось Igorsrt, 02.11.2019 в 13:22.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое изменение цветов div Vladimir93 Общие вопросы Javascript 0 14.11.2014 14:55
как лучше сделать динамическое изменение изображений ? asker AJAX и COMET 4 27.01.2012 14:22
Динамическое изменение фона ячейки CyMKuH Элементы интерфейса 2 11.07.2011 15:19
Динамическое изменение <input text> baal1988 Events/DOM/Window 4 24.08.2008 17:17
Динамическое изменение размеров изображения Макс Элементы интерфейса 7 21.07.2008 16:55