gpt4 book ai didi

javascript - 动态创建的 Javascript 按钮无法正常运行或无法调用函数

转载 作者:太空宇宙 更新时间:2023-11-04 13:55:40 25 4
gpt4 key购买 nike

我希望有人能帮助我,恐怕我是 javascript 的新手,如果这个问题有一个非常简单的解决方案,我深表歉意。然而,我花了很多时间尝试自己解决这个问题,但没有成功。

代码的目的是确定一个月中有多少天,并动态创建与每一天相关的按钮。覆盖此“日历”的是一个带有关闭按钮的 div,其中将包含问题详细信息,关闭按钮关闭此 div 以显示下方的“日历”。

我有很多问题;首先,按钮看起来不像按钮——鼠标悬停时光标不会变为指针,悬停、事件等伪类也无法识别。其次,尽管按钮在 chrome 元素检查器中似乎附加了“点击”监听器,但它们不执行“showQuestion”功能。

代码如下:

CSS

 .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*/
}

HTML

<body>

<div id="container" class="centred">
</div>

<div id = "questionContainer" class="centred">
<button id = "closeButton" class = "show" onClick="hideQuestion()">Close</button>
</div>

</body>

Javascript

 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 构建功能以增加我对语言的理解。

在此先感谢您的帮助!

最佳答案

因此,您的代码存在一些小问题,但除此之外,它实际上一切正常。

首先,假设这是您的整个 javascript 文件,您正试图在页面尚未完全加载时运行代码以查找页面上的元素。所以你需要做的就是在主体加载后才开始执行这段代码。做起来很简单,只需将您的 body 标签更改为如下所示:

<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)然后可以访问。

关于javascript - 动态创建的 Javascript 按钮无法正常运行或无法调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21904911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com