Javascript.RU

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

Установка события из класса
Добрый день!
Реализую простенький календарь под свои нужды. Сделал класс календаря, есть методы класса по отрисовки календаря в передаваемый снаружи div. Есть генерируемых стрелочки перехода на соседние месяцы. Есть метод перехода. Но как эти методы перехода привязать к кликам стрелочек изнутри класса? Мы ведь не знаем имени внешней переменной объекта созданного.
Можно сделать класс-обертку и объект календаря сделать глобальным. Но это кажется не совсем правильным решением.

Подскажите как правильно сделать функционал в этом случае?
Ответить с цитированием
  #2 (permalink)  
Старый 05.12.2024, 10:25
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Какой класс вы имеете в виду? class в javascript?
Сообщение от Beer75
Мы ведь не знаем имени внешней переменной объекта созданного.
В классах для этого this есть.
Ответить с цитированием
  #3 (permalink)  
Старый 05.12.2024, 17:48
Новичок на форуме
Отправить личное сообщение для Beer75 Посмотреть профиль Найти все сообщения от Beer75
 
Регистрация: 05.06.2013
Сообщений: 8

Мы же не можем, например на div, навесить OnClick="this.nextMonth();", снаружи this не привязан ни к чему. Если делать обертку, то можно создать глобальный объект и уже оберткой привязать к событию globalCalendar.addEventListener("click", globalObject.nextMonth). А хочется к генерируемой DOM-разметке привязать внутренний метод.
Ответить с цитированием
  #4 (permalink)  
Старый 05.12.2024, 19:59
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Beer75, пока ты не начнешь делать тестовые примеры - дело не сдвинется с места.
Ты все про Фому... А тебе про Ерему.
Ответить с цитированием
  #5 (permalink)  
Старый 06.12.2024, 08:08
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от Beer75
Мы же не можем, например на div, навесить OnClick="this.nextMonth();", снаружи this не привязан ни к чему.
Так, как я понял, обработчик должен назначаться внутри класса, а не снаружи.
Хотя, не видя ваше класса и остального кода ничего сказать нельзя.
Ответить с цитированием
  #6 (permalink)  
Старый 08.12.2024, 20:47
Новичок на форуме
Отправить личное сообщение для Beer75 Посмотреть профиль Найти все сообщения от Beer75
 
Регистрация: 05.06.2013
Сообщений: 8

Ок. Код. =о)

calendar.html
...
<div id="myCalendar_div"></div>
...
<script>
function onLoad(){
myCalendar=new myCalendar();
myCalendar.renderCalendar('myCcalendar_div');
}
</script>

myCalendar.js

class MyCalendar{
outputDiv=null;

constructor(){
// вычисляем текущую дату, необходимые параметры

}

renderCalendar(oDiv){

this.outputDiv=document.querySelector("#"+oDiv);
// вывод сетки календаря
...
// вывод двух ссылок, на следующий месяц и предыдущий
this.outputDiv.innerHTML=this.outputDiv.innerHTML+ '<span id="prevMonth">пред</span><span id="nextMonth">след</span>';
}

nextMonth(){
// вычисляем необходимые параметры
this.renderCalendar();

}

prevMonth(){
// вычисляем необходимые параметры
this.renderCalendar();

}


}

Вопрос: можно ли внутри функции renderCalendar повесить на span обработчики с вызовом nextMonth() и prevMonth()?

Если ставить this.nextMonth(), то ошибка, естественно. А название переменной myCalendar, определяемой в onLoad() недоступно внутри класса.

Или я что-то не так делаю в принципе?
Ответить с цитированием
  #7 (permalink)  
Старый 09.12.2024, 10:59
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от Beer75
Вопрос: можно ли внутри функции renderCalendar повесить на span обработчики с вызовом nextMonth() и prevMonth()?
Разумеется можно.

Вот только вся "логика" и ее реализация у тебя весьма неудачные...
Ответить с цитированием
  #8 (permalink)  
Старый 09.12.2024, 11:10
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Beer75,если немного переделать твои фантазии

<div id="myCalendar_div"></div>


<script>

class MyCalendar {
	outputDiv = null;
	constructor(oDiv){
		// вычисляем текущую дату, необходимые параметры
		this.outputDiv = document.querySelector("#"+oDiv);
	}
	renderCalendar(){
		// вывод сетки календаря
		// вывод двух ссылок, на следующий месяц и предыдущий
		this.outputDiv.innerHTML = '<span id="prevMonth">пред</span> <span id="nextMonth">след</span>';
		prevMonth.addEventListener('click', e => this.prevMonth())
		nextMonth.addEventListener('click', e => this.nextMonth())
	}
	nextMonth(){
		alert('nextMonth')
		// вычисляем необходимые параметры
		this.renderCalendar();

	}
	prevMonth(){
		alert('prevMonth')
		// вычисляем необходимые параметры
		this.renderCalendar();

	}
}
//
function onLoad(){
	const o = new MyCalendar('myCalendar_div');
	o.renderCalendar();
}

onLoad()


</script>
Ответить с цитированием
  #9 (permalink)  
Старый 09.12.2024, 20:10
Новичок на форуме
Отправить личное сообщение для Beer75 Посмотреть профиль Найти все сообщения от Beer75
 
Регистрация: 05.06.2013
Сообщений: 8

Сообщение от ksa Посмотреть сообщение
Разумеется можно.

Вот только вся "логика" и ее реализация у тебя весьма неудачные...
А как сделать удачные?
Ответить с цитированием
  #10 (permalink)  
Старый 09.12.2024, 20:16
Новичок на форуме
Отправить личное сообщение для Beer75 Посмотреть профиль Найти все сообщения от Beer75
 
Регистрация: 05.06.2013
Сообщений: 8

ksa, спасибо!
понял, в чем была моя ошибка. Пытался запихать обработчик в параметр тэга onClick="". Учусь, торможу. =о)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Именованный обработчик события в методе класса deGeneral Events/DOM/Window 5 27.11.2019 23:22
Установка свойств заданных из класса Anton1979 Общие вопросы Javascript 6 10.10.2019 15:22
Как вызвать кастомные события внутри класса? mazahaler Элементы интерфейса 1 30.01.2019 13:57
Калькулятор с вариантом значений. dzho Общие вопросы Javascript 45 06.08.2017 03:54
Использование классов в JavaScript devote Ваши сайты и скрипты 70 01.02.2013 17:17