Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #51 (permalink)  
Старый 27.07.2019, 00:30
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Блондинка
если использовать строчку
document.querySelector('#day_01').options[d.getDay()||7].selected = true;
в hrml надо использовать список опций По порядку с воскресенья По субботу, а если использовать строчку с value то можно опции располагать в любом порядке...
Ну в общем то да, но для вашего списка по индексу таким образом не получится, есть ошибка и d.getDay()-1||7 тоже будет с ошибкой.

a = b || c

означает "присвоить a значение b ИЛИ c", при этом значение b будет присвоено только в случае если булево значение ее равно true (в данном случае не равно 0), иначе будет присвоено значение c. Вы хотите сделать так:

a = b-1 || c

Да, направление логики верное - сдвинуть индексы вверх на одну позицию. Но только такое решение логики также будет выдавать ошибки, и это легко проверить:

<script>
//это календарь буржуев
var d = 'Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота'.split(' '),
//а это наш календарь и ваш список
    s = 'Понедельник Вторник Среда Четверг Пятница Суббота Воскресенье'.split(' '), a = [];    
//здесь итератор i имитирует номер дня возвращаемого функцией getDay()
//и решение, в которое вы облекли свою логику и которое ошибочно 
for(var i=0; i<7; i++) a.push( 
    d[i]+' > '+i 
    +', номер дня после вычитания > '+(i-1)  
    +', индекс для опции > '+(i-1||7) 
    +', выбранный в списке день > '+s[i-1||7]);
    
document.write(a.join('<br>'));
</script>


Так как нужно записать вашу логику для b || c, так чтобы в итоге получить индексы на 1 меньше? И ответ на этот вопрос нужно искать не в JS, а в математике из школьного курса.

По поводу точек с запятой - именно в этом коде, так как он написан, каждое действие на новой строке, их вообще может и не быть, но если код "сжать", то он работать не будет.
Ответить с цитированием
  #52 (permalink)  
Старый 27.07.2019, 01:45
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

laimas,
получается что надо использовать строчку
document.querySelector('#day_01').options[d.getDay()].selected = true;
и список
<select>
<option>вс</option>
<option>пн</option>
...
<option>сб</option>

вроде бы сейчас правильно...
Ответить с цитированием
  #53 (permalink)  
Старый 27.07.2019, 02:01
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Да, либо поставить опции списка в том же порядке, что возвращает функция getDay(), либо использовать наш порядок, но уменьшая индекс на 1:

document.querySelector('#day_01').options[(d.getDay()||7)-1].selected = true;
Ответить с цитированием
  #54 (permalink)  
Старый 27.07.2019, 20:07
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Блондинка
laimas, а тут что не так?
А вам не кажется странным, что приходится писать много однотипного кода? А если добавить ещё один календарь для изменения дат, то как вы решите ваши противоречия в коде?

Сообщение от Блондинка
можно спан оформить стилями, и для каждого браузера использовать своё фоновое изображение, но проще сделать селект
А зачем вам фоновое изображение, когда у элемента <select> его нет? Для этого у элемента <select> используется свойство -webkit-appearance (в старых Firefox также было свойство -moz-appearance)

Сообщение от Блондинка
но проще сделать селект
Который выглядит абсолютно по разному в разных браузерах и на разных платформах! Вам так и так придётся применить appearance: none и другие объявления, чтобы поля выглядели однородно!

Сообщение от Блондинка
оптион
Сообщение от laimas
опшен
Не, не попало... оно произносится как /ɑpʃn̩/ https://youglish.com/search/option/us



Сообщение от laimas
Неделя у «буржуев», в отличии от нас пролетариев, начинается с воскресенья
В Священном Писании сказано: «Помни субботний день и освящай его. Шесть дней работай и делай все свои дела, а седьмой день — суббота Господу, твоему Богу» (Исход [Шмот, Итро] 20:7–9, Тора, Перевод с иврита Давида Сафронова)

laimas, обратите внимание, что суббота является седьмым днём, а значит следующий день недели, который в современном русском языке называется воскресением, является первым днём. Еврейское слово שַׁבָּת означает день отдыха.

Как видите, воскресенье — с давних пор первый день недели. Также вы можете прочитать в христианских писаниях: «По прошествии же субботы, на рассвете первого дня недели, пришла Мария Магдалина и другая Мария посмотреть гроб». (Матфея 28:1, Синодальный перевод)

В иудейских, христианских и мусульманских странах семидневная неделя начиналась с воскресенья. Россия не была исключением.




































И уже потом в СССР первым днём недели был объявлен понедельник...

Из-за этого безосновательного поступка у русскоязычных читателей Священного Писания возникает теперь вопрос: «Почему суббота названа седьмым днём?»












Блондинка, если вы создаёте дату new Date() и хотите изменять её при помощи графического интерфейса, то вы можете написать класс DateView, который позволяет изменять экземпляр даты. Таким образом у вас для каждой даты будет свой собственный редактор, который не мешает другим редакторам даты! Пример, как это может выглядеть...
var myDate = new Date();
var view = new DateView(myDate);
document.body.appendChild(view.element);
Просто и легко! Вот реализация класса DateView с примером...
<!DOCTYPE HTML>
<html lang="ru">

<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width">
	<style>

.calendar-view button,
.calendar-view select,
.calendar-view input {
	box-sizing: border-box;
	height: 2em;
	margin: 0;
	-webkit-appearance: none;
	-moz-appearance: none;
	appearance: none;
	padding: 0 0.5em;
	border: 0;
	background: white;
	font: inherit;
}
		
.calendar-view button[value] {
	min-width: 2em;
	font-weight: bold;
	border: 0 solid #eee;
}
		
.calendar-view button[value="-1"] {
	border-right-width: 1px;
}
		
.calendar-view button[value="1"] {
	border-left-width: 1px;
	float: right;
}
		
.calendar-view input[type=number] {
	width: 5em;
}

.calendar-view .control {
	display: inline-block;
	border: 1px solid #aaa;
	margin: 0.1em;
	border-radius: 0.3em;
	overflow: hidden;
}
		
@media(max-width: 250px) {
	.calendar-view .control {
		display: block;
	}
}
	</style>
	<script>
		
function DateView(date) {
	this.date = date;
	this.element = document.createElement("div");
	this.element.className = "calendar-view";

	this.header = document.createElement("div");
	this.element.appendChild(this.header);

	this.dateElement = document.createElement("select");
	this.dateElement.addEventListener("change", function() {
		view.date.setDate(this.value);
		view.update();
	});
	this.element.appendChild(this.dateElement);
	this.addControls(this.dateElement, "Date");

	this.monthElement = document.createElement("select");
	this.monthElement.addEventListener("change", function() {
		view.date.setMonth(this.value);
		view.update();
	});
	this.element.appendChild(this.monthElement);
	this.addControls(this.monthElement, "Month");

	this.yearElement = document.createElement("input");
	this.yearElement.type = "number";
	this.yearElement.addEventListener("change", function() {
		view.date.setFullYear(this.value);
		view.update();
	});
	this.element.appendChild(this.yearElement);
	this.addControls(this.yearElement, "FullYear");

	var view = this;			
	view.update();
}

DateView.prototype = {
	constructor: DateView,
	update: function() {
		var days = "Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота".split(" ");
		var monthes = "января февраля марта апреля мая июня июля августа сентября октября ноября декабря".split(" ");
		this.header.textContent = days[this.date.getDay()];

		var date = this.date.getDate();
		var html = '';
		var days = new Date(this.date.getFullYear(), this.date.getMonth() + 1, 0).getDate();
		for(var i = 1; i <= days; i++)
			html += '<option '+ (i === date ? ' selected' : '')+ '>'+ i+ '</option>';
		this.dateElement.innerHTML = html;

		var month = this.date.getMonth();
		var html = '';
		for(var i = 0; i < 12; i++)
			html+='<option value="'+ i+ '"'+ (i === month ? ' selected' : '')+ '>'+ monthes[i]+ '</option>';
		this.monthElement.innerHTML = html;

		this.yearElement.value = this.date.getFullYear();				
	},
	addControls: function(element, component) {
		var view = this;
		var controlField = document.createElement("div");
		controlField.className = "control";
		element.parentNode.insertBefore(controlField, element);

		var prevButton = document.createElement("button");
		prevButton.textContent = "−";
		prevButton.value = "-1";
		prevButton.addEventListener("click", handler);

		var nextButton = document.createElement("button");
		nextButton.textContent = "+";
		nextButton.value = "1";
		nextButton.addEventListener("click", handler);

		controlField.appendChild(prevButton);
		controlField.appendChild(element);
		controlField.appendChild(nextButton);
		element.controls = [prevButton, nextButton];

		function handler() {
			view.date["set" + component](view.date["get" + component]() + Number(this.value));
			view.update();
		}
	}
};

// Пример использования
document.addEventListener("DOMContentLoaded", function() {
	var myDate = new Date();
	var view = new DateView(myDate);
	document.body.appendChild(view.element);
});

	</script>
</head>

<body></body>

</html>

Последний раз редактировалось Malleys, 27.07.2019 в 20:31. Причина: Исправил ошибку в Firefox связанную с min-height
Ответить с цитированием
  #55 (permalink)  
Старый 27.07.2019, 23:38
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

Malleys,
а чем не вариант установить на странице выпадающий список с одной опцией, в которой и отображается день недели, и нету возможности выбора, мне кажется этот вариант проще, чем наделать скриншотов с разных браузеров обрезать выпадающий список и эти изображения использовать для спана в качестве фонового изображения...
Ответить с цитированием
  #56 (permalink)  
Старый 28.07.2019, 01:51
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Блондинка
а чем не вариант установить на странице выпадающий список с одной опцией, в которой и отображается день недели, и нету возможности выбора, мне кажется этот вариант проще, чем наделать скриншотов с разных браузеров обрезать выпадающий список и эти изображения использовать для спана в качестве фонового изображения...
А где вы вообще увидели снимки экрана и фоновые картинки в примере?

Теперь у вас новая навязчивая идея — выпадающий список с одной опцией и нету возможности выбора. А зачем вам такое? Решение — используйте текстовый узел (text node)!

Несколько месяцев назад у вас была другая навязчивая идея — нажать на <div>. Решение — используйте <button>.

Следуйте этим простым советам, и у вас всё получится!

Кстати, пример, который я сделал, он работает на вашем телефоне? Если нет, то попытайтесь найти в примере то, чего не было в 2011 году! Если да, то всё равно разберите пример, попытайтесь понять, что делает каждый участок кода!

Сообщение от Русский
Как бы у них после этого не возник вопрос насчёт [понедельника,] вторника, [среды,] четверга и пятницы.
Так именно у вас и возник такой вопрос! (Добавил в вашу цитату в квадратных скобках дни недели, которые для вас, очевидно, ещё больше не понятны!)

Если вы читали выше, то у вас определённо должен был возникнуть вопрос, а как же всё-таки называлось воскресенье! Воскресенье называлось — недѣлей (ст.‑слав. недѣ́ля, то есть днём, когда «не делают», то есть не работают, во всех остальных славянских языках, этот день называется «недѣлей» (польск. niedziela, укр. неділя, хорват. nedjelja, болгар. неделя, чеш. neděle и т. д.))

Соответственно...
  • начало седмицы — недѣля
  • первый день после недѣли — понедѣльникъ
  • второй день после недѣли — вторникъ
  • середина седмицы — среда
  • четвёртый день после недѣли — четвергъ
  • пятый день после недѣли — пятница
  • седьмой день седмицы — суббота (др.‑евр. שַׁבָּת, такое понимание подкреплено Священным Писанием, где сказано: «Помни субботний день и освящай его. Шесть дней работай и делай все свои дела, а седьмой день — суббота Господу, твоему Богу»)

Именно такой порядок дней вы видите в календарях России (однако до тех пор, пока не начали бесноваться безбожники СССР), в странах обоих Америк, Японии, Израиля и пр. стран.

Три дня до среды, среда и три дня после среды составляют седмицу. Вот, смотрите как симметрично! 3 + 1 + 3 = 7

А у вас получается, что середина недели — четверг, среда куда-то набок съехала, якобы нашли ошибку в Писании, а логика, что вторник — это день №2, намекает на то, что и длины вы измеряете не от 0 см, а от 1 см! (Хотя такого может и не быть! Парадокс! Однако не удивительно, что вы говорили о взаимозаменяемости времени и расстояния!)

Сообщение от Блондинка
список с одной опцией,
Сообщение от Русский
вопрос насчёт вторника
Знаете ли, когда кухарка либо дворник либо ещё какой человек не посоветовавшись лезет в дела неподвластные его уму, то не достойно ли это лучшего комедийного представления?

Последний раз редактировалось Malleys, 28.07.2019 в 01:59.
Ответить с цитированием
  #57 (permalink)  
Старый 28.07.2019, 02:12
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

Malleys,
после революции был советский календарь с пятидневной неделей, в настоящее время страны СНГ пользуются календарём с первым днем недели понедельник, и от этого никуда не деться...

скрипт в предыдущем посте работает
Ответить с цитированием
  #58 (permalink)  
Старый 28.07.2019, 02:17
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

вот приемлимое для меня решение

document.addEventListener('DOMContentLoaded', function() {
    var d = new Date(),
        days = "Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота".split(" ");
    
    document.querySelector('#day').textContent = days[d.getDay()];
    document.querySelector('#day_01').options[d.getDay()||7].selected = true;
    document.querySelector('#day_02').value = d.getDay()
    document.querySelector('#date').options[d.getDate()-1].selected = true;
    document.querySelector('#date_01').value = d.getDate();
    document.querySelector('#month').options[d.getMonth()].selected = true;
    document.querySelector('#year').value = d.getFullYear();
});


для 3-5 строчки этого кода использовать следующий html

<select><option id="day"></option></select>

Последний раз редактировалось Блондинка, 26.05.2021 в 12:16.
Ответить с цитированием
  #59 (permalink)  
Старый 28.07.2019, 07:18
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Блондинка
вот приемлемое для меня решение
Оно не может быть приемлемым для вас, поскольку вы используете элементы управления, и при изменении не происходит перерасчёта дня недели!

По сути вы просто один раз выводите дату и всё! Таким образом, если вы всё-таки примените, то что я вам написал (а именно то, что вместо <select><option id="day"></option></select> вам следует использовать текстовый узел), то вывод даты станет приемлемым!

Сообщение от Блондинка
для 3-5 строчки этого кода использовать следующий html

<select><option id="day"></option></select>
Читайте внимательно, что вам написал ранее, там уже было написано, как решить вашу проблему! Решение — используйте текстовый узел (text node)!

<body>
<script>
var days = "Воскресенье Понедельник Вторник Среда Четверг Пятница Суббота".split(" ");
var monthes = "января февраля марта апреля мая июня июля августа сентября октября ноября декабря".split(" ");
var date = new Date();
var textNode = document.createTextNode(days[date.getDay()] + ", " + date.getDate() + " " + monthes[date.getMonth()] + " " + date.getFullYear() + " года.");
document.body.appendChild(textNode);
</script>

Последний раз редактировалось Malleys, 28.07.2019 в 07:20.
Ответить с цитированием
  #60 (permalink)  
Старый 28.07.2019, 12:35
Аватар для Блондинка
Профессор
Отправить личное сообщение для Блондинка Посмотреть профиль Найти все сообщения от Блондинка
 
Регистрация: 24.02.2019
Сообщений: 806

Malleys,
ну незнаю как ещё объяснить, есть форма с двумя списками для даты и месяца и полем ввода, в эту форму надо добавить текстовый узел выводящий день недели, но с помощью стилей изменить внешний вид этого текстового узла, чтобы он визуально не отличался от списка...
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать калькулятор и с чего начать? A.P. Yellowman Общие вопросы Javascript 3 15.11.2013 21:32
Как сделать реакцию на изменение любого элемента формы. Mik Events/DOM/Window 3 28.07.2011 08:52
Как убрать hover? Либо как сделать стрелки статичными? krusty36 Элементы интерфейса 1 13.07.2011 09:20
Как сделать, чтобы при наведении на кнопку справа от нее появлялись текстовые ссылки? Tass Общие вопросы Javascript 7 17.02.2011 09:06
Вопрос как сделать эту панельку Определённых размеров и свойств. jei jQuery 3 09.06.2009 19:14