单击时切换文本内容.由于某种原因,它需要2次点击
Switching text content on click. For some reason it takes 2 clicks?
我正在尝试通过jquery更改<h1>
元素中的文本。
我很接近!由于某种原因,需要单击2次才能切换文本。知道我该如何解决这个问题吗?
演示
.HTML
<center>
<div class="contentTab">
<div class="triangle-up"></div>
<h1>CLOSE TOP HEADER</h1>
</div>
</center>
.CSS
.contentTab{
width:300px;
height:49px;
background:#f1efef;
border-top-right-radius:12px;
border-top-left-radius:12px;
position:absolute;
margin-left:50%;
left:-150px;
margin-top:23px;
cursor:pointer;
}
.contentTab h1{
color:#a9a9a9;
text-shadow: 1px 1px #fcfcfc;
font-size:12px;
margin-top:3px;
font-weight:bold;
}
.triangle-up {
width: 7px;
height: 0;
padding-left: 7px;
padding-bottom: 7px;
overflow: hidden;
margin-top:8px;
}
.triangle-up:after {
content: "";
display: block;
width: 0;
height: 0;
margin-left:-500px;
border-left: 500px solid transparent;
border-right: 500px solid transparent;
border-bottom: 500px solid #b0b0b0;
}
.triangle-down {
width: 7px;
height: 0;
padding-left: 7px;
padding-bottom: 7px;
overflow: hidden;
margin-top:8px;
-moz-transform: scaleY(-1);
-webkit-transform: scaleY(-1);
transform: scaleY(-1);
filter: flipv; /*IE*/
}
.triangle-down:after {
content: "";
display: block;
width: 0;
height: 0;
margin-left:-500px;
border-left: 500px solid transparent;
border-right: 500px solid transparent;
border-bottom: 500px solid #b0b0b0;
}
.contentTab:hover h1, .contentTab:hover .triangle-up:after{
color:#919191;
border-bottom-color:#919191;
}
.contentTab:hover {
margin-top:18px;
height:54px;
}
.contentTab h1, .contentTab:hover h1, .contentTab:hover .triangle-up:after, .contentTab:hover, .triangle-down:after, .triangle-down, .contentTab {
-webkit-transition: all 0.25s ease-out;
-moz-transition: all 0.15s ease-out;
-ms-transition: all 0.15s ease-out;
-o-transition: all 0.15s ease-out;
transition: all 0.15s ease-out;
}
.JS
$('.contentTab').on('click', function(e) {
$('.mainContent').toggleClass("closeHeader");
$('.contentTab ').toggleClass("contentTabActive");
$('.triangle-up').toggleClass("triangle-down");
$(".triangle-down").insertAfter(".contentTab h1");
$(".triangle-up:not(.triangle-down)").insertBefore(".contentTab h1");
e.preventDefault();
$(".contentTab").click(function () { $(".contentTab h1").text(function(i, v){
return v === 'CLOSE TOP HEADER' ? 'OPEN TOP HEADER' : 'CLOSE TOP HEADER' }) });
});
是的,你的JS代码应该避免嵌套click
事件初始化。我想你试着做这样的事情。
.js
$('.contentTab').on('click', function(e) {
$('.mainContent').toggleClass("closeHeader");
$('.contentTab ').toggleClass("contentTabActive");
$('.triangle-up').toggleClass("triangle-down");
$(".triangle-down").insertAfter(".contentTab h1");
$(".triangle-up:not(.triangle-down)").insertBefore(".contentTab h1");
var h1 = $(this).find("h1");
var str =h1.text() === 'CLOSE TOP HEADER' ?
'OPEN TOP HEADER' :
'CLOSE TOP HEADER'
h1.text(str);
});
首次单击时不会更改文本,因为您定义了函数以在嵌套到另一个事件侦听器的事件侦听器中更改该文本。这意味着在首次单击时没有事件侦听器可以切换文本。事实上,事件侦听器(切换文本)是在第一次点击后定义的,这就是为什么你需要两次点击来切换文本。
因此,您的代码只需删除该嵌套事件侦听器并在第一个onclick
中定义您的函数即可工作。
$('.contentTab').on('click', function(e) {
$('.mainContent').toggleClass("closeHeader");
$('.contentTab ').toggleClass("contentTabActive");
$('.triangle-up').toggleClass("triangle-down");
$(".triangle-down").insertAfter(".contentTab h1");
$(".triangle-up:not(.triangle-down)").insertBefore(".contentTab h1");
$(".contentTab h1").text( function(i, v) {
return v === 'CLOSE TOP HEADER' ? 'OPEN TOP HEADER' : 'CLOSE TOP HEADER'
});
e.preventDefault();
});
JSFiddle: https://jsfiddle.net/99th1w75/5/
尝试从已经单击的函数中删除内部单击函数:
$('.contentTab').on('click', function(e) {
$('.mainContent').toggleClass("closeHeader");
$('.contentTab ').toggleClass("contentTabActive");
$('.triangle-up').toggleClass("triangle-down");
$(".triangle-down").insertAfter(".contentTab h1");
$(".triangle-up:not(.triangle-down)").insertBefore(".contentTab h1");
e.preventDefault();
$(".contentTab h1").text(function(i, v){
return v === 'CLOSE TOP HEADER' ? 'OPEN TOP HEADER' : 'CLOSE TOP HEADER' });
});
.contentTab{
width:300px;
height:49px;
background:#f1efef;
border-top-right-radius:12px;
border-top-left-radius:12px;
position:absolute;
margin-left:50%;
left:-150px;
margin-top:23px;
cursor:pointer;
}
.contentTab h1{
color:#a9a9a9;
text-shadow: 1px 1px #fcfcfc;
font-size:12px;
margin-top:3px;
font-weight:bold;
}
.triangle-up {
width: 7px;
height: 0;
padding-left: 7px;
padding-bottom: 7px;
overflow: hidden;
margin-top:8px;
}
.triangle-up:after {
content: "";
display: block;
width: 0;
height: 0;
margin-left:-500px;
border-left: 500px solid transparent;
border-right: 500px solid transparent;
border-bottom: 500px solid #b0b0b0;
}
.triangle-down {
width: 7px;
height: 0;
padding-left: 7px;
padding-bottom: 7px;
overflow: hidden;
margin-top:8px;
-moz-transform: scaleY(-1);
-webkit-transform: scaleY(-1);
transform: scaleY(-1);
filter: flipv; /*IE*/
}
.triangle-down:after {
content: "";
display: block;
width: 0;
height: 0;
margin-left:-500px;
border-left: 500px solid transparent;
border-right: 500px solid transparent;
border-bottom: 500px solid #b0b0b0;
}
.contentTab:hover h1, .contentTab:hover .triangle-up:after{
color:#919191;
border-bottom-color:#919191;
}
.contentTab:hover {
margin-top:18px;
height:54px;
}
.contentTab h1, .contentTab:hover h1, .contentTab:hover .triangle-up:after, .contentTab:hover, .triangle-down:after, .triangle-down, .contentTab {
-webkit-transition: all 0.25s ease-out;
-moz-transition: all 0.15s ease-out;
-ms-transition: all 0.15s ease-out;
-o-transition: all 0.15s ease-out;
transition: all 0.15s ease-out;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<center>
<div class="contentTab">
<div class="triangle-up"></div>
<h1>CLOSE TOP HEADER</h1>
</div>
</center>
相关文章:
- 由于某种原因,JavaScript整数存储为未定义
- 由于某种原因,我的JavaScript函数无法工作
- 由于某种原因未返回值
- 我有一个错误,由于某种原因,号码被更改了,而不是名字
- .aspx页面JS将在控件似乎由于某种原因而被呈现之前启动Onload脚本
- 用于在数组比较之后由于某种原因而爆发循环
- 无法让我的“hello world”YUI asyncRequest javascript 运行,并且由于某种原因,我无
- 如果语句由于某种原因不起作用
- 排序属性由于某种原因不起作用
- 由于某种原因,COALESE 返回 0 而不是正确的值
- 上次单击DIV永久颜色,由于某种原因不起作用
- Node.js由于某种原因崩溃了
- 由于某种原因,Pubnub javascript 没有收到回调或消息
- 我有一个基于计数器的 if/else 语句,但由于某种原因,else 不起作用
- 由于某种原因,我减去时的回报不正确
- 使用 jQuery 1.4.4 由于某种原因,这个简单的方法失败了
- 单击时切换文本内容.由于某种原因,它需要2次点击
- JQuery:由于某种原因,文本被添加到文本框中,我可以'我想不通
- 由于某种原因,按钮上的点击事件被阻止
- 由于某种原因,Jquery链接选择器不起作用