Я надеюсь, что кто-то может мне помочь, боюсь, я очень новичок в javascript и так извиняюсь, если эта проблема имеет очень простое решение. Тем не менее, я потратил много времени, пытаясь исправить это сам, но не успел.
Цель кода - определить, сколько дней в месяце и динамически создать кнопку, относящуюся к каждому из этих дней. Наложение этого "календаря" - это div с кнопкой закрытия, которая будет содержать детали вопроса, кнопка закрытия закрывает этот div, чтобы открыть "календарь" внизу.
У меня есть ряд проблем; во-первых, кнопки не действуют, как buttons-, курсор не изменяется на указатель мыши, а псевдо-классы для зависания, активного и т.д. не распознаются. Во-вторых, хотя у кнопок, как представляется, есть "щелчок", прослушиватель, прикрепленный в инспекторе хром-элементов, они не выполняют функцию "showQuestion".
Код выглядит следующим образом:
.day {
width: 15%;
max-width: 120px;
min-width: 60px;
height: 15%;
max-height: 120px;
min-height: 60px;
padding: 10px;
border: 1px solid #aaaaaa;
margin: 5px;
color: white;
background-color:#000088;
display:block;
cursor:pointer;
}
.day:hover, .day:active{
background:#00ddff;
}
.day:focus{
border 1px solid #000000;
}
.day.today{
background-color: Red;
}
.centred{
display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */
display: -moz-box; /* OLD - Firefox 19- (buggy but mostly works) */
display: -ms-flexbox; /* TWEENER - IE 10 */
display: -webkit-flex; /* NEW - Chrome */
display: flex;
align-self: center;
justify-content: ltr;
flex-wrap: wrap;
}
#container {
position: fixed;
margin-top: 25%;
margin-left: 10%;
overflow: hidden;
width: 80%;
height: auto;
background-color: yellow;
z-index: 1000;
}
#questionContainer{
position:fixed;
margin-top: 5%;
margin-left: 5%;
width: 90%;
height: 90%;
display:block;
background-color: green;
z-index:3000;
}
#closeButton{
background: blue;
text-decoration: : none;
padding: 5px 5px 5px 25px;
border:none;
color:white;
cursor:pointer;
}
.show {
-o-transition: opacity .5s;
-moz-transition: opacity .5s;
-webkit-transition: opacity .5s;
transition: opacity .5s;
opacity:1;
filter:alpha(opacity=100); /*IE transparency*/
}
#closeButton:hover, #closeButton:active{
background:#ffffff;
}
#closeButton:focus{
border 1px solid #000000;
}
.hide {
-o-transition: opacity .5s;
-moz-transition: opacity .5s;
-webkit-transition: opacity .5s;
transition: opacity .5s;
opacity: 0;
filter:alpha(opacity=0); /*IE transparency*/
}
<body>
<div id="container" class="centred">
</div>
<div id = "questionContainer" class="centred">
<button id = "closeButton" class = "show" onClick="hideQuestion()">Close</button>
</div>
</body>
var qtnContainer = document.getElementById("questionContainer");
function hideQuestion(){
qtnContainer.className = "hide";
}
function showQuestion(){
qtnContainer.className = "show";
}
Date.prototype.daysInThisMonth=function() {
return new Date(this.getFullYear(),this.getMonth()+1,0).getDate();
};
var days = new Date().daysInThisMonth();
var today = new Date().getDate();
//alert("days in month = "+ days);
//alert("day of the month = "+ today);
for (var i = 0; i < days; i++){
var dayBtn = document.createElement("button");
dayBtn.innerHTML = "Day "+(i+1);
document.getElementById("container").appendChild(dayBtn);
if(dayBtn !== null){
dayBtn.id = "day"+(i+1);
dayBtn.className = "day";
dayBtn.addEventListener("click",showQuestion, false);
}
}
alert("day"+today);
if(dayBtn.id = "day"+today){
document.querySelector("#day"+today).className += " today";
}
Хотя я ценю любую помощь, которую я получаю, пожалуйста, не предоставляйте мне какие-либо решения jQuery, я хочу создать функциональность в чистом javascript, чтобы улучшить свое понимание языка.
Заранее благодарю за любую помощь!
Ну, событие было правильно подключено, но ваш questionContainer
все еще блокировал любое взаимодействие с мышью. Использовать pointer-events: none
чтобы исправить это.
Как это:
.hide {
-o-transition: opacity .5s;
-moz-transition: opacity .5s;
-webkit-transition: opacity .5s;
transition: opacity .5s;
opacity: 0;
filter:alpha(opacity=0); /*IE transparency*/
pointer-events:none;
}
Посмотрите, как это работает: http://jsfiddle.net/t9zvS/1/
Возможно, у вас будут проблемы в IE. Изучите эту тему SO: Пропустите мышиные события через абсолютно позиционированный элемент
Итак, у вас есть несколько небольших проблем с кодом, но мимо них все работает.
Прежде всего, предполагая, что это весь ваш файл javascript, вы пытаетесь запустить код, который ищет элементы на странице, когда страница еще не загружена полностью. Итак, что вам нужно сделать, только начинает выполнять этот код, когда тело загрузилось. Просто сделать, просто измените тег тела, чтобы выглядеть примерно так:
<body onload="now_do_stuff()">
А затем оберните JS, который в настоящее время не находится внутри функции, в этой новой функции. Итак, что-то вроде:
function now_do_stuff() {
qtnContainer = document.getElementById("questionContainer");
for (var i = 0; i < days; i++){
var dayBtn = document.createElement("button");
dayBtn.innerHTML = "Day "+(i+1);
document.getElementById("container").appendChild(dayBtn);
if(dayBtn !== null){
dayBtn.id = "day"+(i+1);
dayBtn.className = "day";
dayBtn.addEventListener("click",showQuestion, false);
}
}
alert("day"+today);
if(dayBtn.id = "day"+today) {
document.querySelector("#day"+today).className += " today";
}
}
И тогда это сработает!
Обратите внимание, что я переместил первую строку (где вы объявляете qtnContainer) в эту функцию тоже, и удалил ее "var". Причина этого заключается в том, что она сделает глобальную переменную, к которой тогда будут доступны другие функции (т.е. hideQuestion и showQuestion).
Вы должны делегировать событие click.
Поэтому вместо: dayBtn.addEventListener("click",showQuestion, false);
Он должен быть: document.getElementById("day"+(i+1)).addEventListener("click",showQuestion, false);
Что-то вроде этого я думаю. (не уверен, поскольку я использую в основном jQuery)