text()不是't在jQuery中工作
text() isn't working in jQuery
jQuery的
text()
函数在第二次点击时不起作用,如jsFiddle 中所示
这是HTML代码:
<div class="mb20"></div>
<nav id="lastNavigation" class="d row clearfix">
<aside class="col-xs-11">
<div class="col-xs-12 lessonNavigation lesson">
<ul class="expandable">
<li class="">
<a href="#">
<span>L1<b>: Recognize a digit represents 10 times the value</b></span>
</a>
</li>
<li class="">
<a href="#">
<span>L2<b>: Recognize a digit represents 10 times the value</b></span>
</a>
</li>
<li class="">
<a href="#">
<span>L3<b>: Recognize a digit represents 10 times the value</b></span>
</a>
</li>
<li class="">
<a href="#">
<span>L4<b>: Recognize a digit represents 10 times the value</b></span>
</a>
</li>
<li class="">
<a href="#">
<span>L5<b>: Recognize a digit represents 10 times the value</b></span>
</a>
</li>
</ul>
</div>
</aside>
</nav>
这是JavaScript:
var count = $('.lessonNavigation li').length;
//========================= Module and Unit Navigation ==================================
if (count > 10 && count <= 18) {
$('.lessonNavigation li').attr('class', 'contracted');
$('.lessonNavigation li:eq(0)').attr('class', 'expanded left');
$('.lessonNavigation li:eq(1)').attr('class', 'activeLesson');
$('.lessonNavigation li:eq(2)').attr('class', 'expanded right');
}
//========================= Expand all navigation by clicking 'contracted' ==============
$('.tilesToggle').click(function () {
$(this).text('Close').toggleClass('tilesToggle tilesToggleClose');
$('.expandable').attr('class', 'expanded');
$('ul.expanded li.activeLesson').attr('class', 'selected');
$('ul.expanded li:not(.selected)').attr('class', '');
$('.lessonNavigation li:even').addClass('animated bounceInLeft');
$('.lessonNavigation li:odd').addClass('animated bounceInRight');
$('.icon-arrow-left, .icon-arrow-right').css('display', 'none');
});
$('.tilesToggleClose').click(function () {
$(this).text('See All').toggleClass('tilesToggleClose tilesToggle');
$('ul.expanded li.selected').attr('class', 'activeLesson');
});
问题不在于.text()
,而是根本没有调用您的第二次单击处理程序。当你说:
$('.tilesToggleClose').click(function () {
您将click处理程序绑定到当时具有该类的任何元素,而不是绑定到单击发生时将来可能具有该类的元素。因此,它是在元素上的所有单击时调用的第一个单击处理程序。
您可以使用绑定到父元素的委托事件处理程序:
$('div.lesson').on('click','.tilesToggle', function () {
...
});
$('div.lesson').on('click','.tilesToggleClose', function () {
...
});
演示:http://jsfiddle.net/hL396/2/
但是,当调用.click()
时,只需将单击处理程序绑定到将具有.tilesToggle
类的元素,然后在处理程序中测试类可能会更容易:
$('.tilesToggle').click(function () {
var $this = $(this);
if ($this.hasClass('tilesToggleClose')) {
$this.text('See All');
$('ul.expanded li.selected').attr('class', 'activeLesson');
} else {
$this.text('Close');
$('.expandable').attr('class', 'expanded');
$('ul.expanded li.activeLesson').attr('class', 'selected');
$('ul.expanded li:not(.selected)').attr('class', '');
$('.lessonNavigation li:even').addClass('animated bounceInLeft');
$('.lessonNavigation li:odd').addClass('animated bounceInRight');
$('.icon-arrow-left, .icon-arrow-right').css('display', 'none');
}
$this.toggleClass('tilesToggle tilesToggleClose');
});
演示:http://jsfiddle.net/hL396/3/
它没有调用,因为点击处理程序在拥有类之前已经初始化。修复:
function showTiles() {
$(this).text('Close').addClass('isShowingTiles');
$('.expandable').attr('class', 'expanded');
$('ul.expanded li.activeLesson').attr('class', 'selected');
$('ul.expanded li:not(.selected)').attr('class', '');
$('.lessonNavigation li:even').addClass('animated bounceInLeft');
$('.lessonNavigation li:odd').addClass('animated bounceInRight');
$('.icon-arrow-left, .icon-arrow-right').css('display', 'none');
}
function hideTiles() {
$(this).text('See All').removeClass('isShowingTiles');
$('ul.expanded li.selected').attr('class', 'activeLesson');
}
$('.tilesToggle').click(function() {
if (!$(this).hasClass("isShowingTiles")){
showTiles.apply($(this));
}
else{
hideTiles.apply($(this));
}
});
我猜您想在第二次单击时展开li
,并将文本设置为SeeAll
我使用了一个简单的if-else
标志
var flag = false;
$('.tilesToggle').click(function () {
if (!flag){
$(this).text('Close');
$('.expandable').attr('class', 'expanded');
$('ul.expanded li.activeLesson').attr('class', 'selected');
$('ul.expanded li:not(.selected)').attr('class', '');
$('.lessonNavigation li:even').addClass('animated bounceInLeft');
$('.lessonNavigation li:odd').addClass('animated bounceInRight');
$('.icon-arrow-left, .icon-arrow-right').css('display', 'none');
flag = true;
}else{
$(this).text('See All');
$('ul.expanded li.selected').attr('class', 'activeLesson');
flag = false;
}
});
演示:jsfiddle
相关文章:
- PHP/AAJAX阻止jquery工作
- Chrome扩展和Chome浏览器中的Jquery工作方式不同
- 2次点击事件不会'我在jquery工作
- 使用 href=“#” JQuery 工作,但使用 href=“page.jsp” 不起作用
- 迭代 javascript 对象无法通过 jQuery 工作
- 让简单的Javascript / jQuery工作(Ariel Flesler的ScrollTo)
- 更新面板阻止 jquery 工作
- Jquery工作,但只是暂时的
- 一个jQuery工作,两个不工作
- 当我使用AngularJS部分时,如何让JQuery工作
- 为什么不;我的jquery工作(使用延迟、hasclass、addclass、removeclass、keyUp、key
- jQuery工作不正常
- 我有一个JQuery工作,但小越野车
- :has() jquery工作不正常
- JQuery工作得太快了
- 如果一个输入单选被选中,改变父元素'的颜色:不能'使它与jQuery工作
- Chrome扩展:访问DOM的弹出.html和让jQuery工作
- 如何使下拉jQuery工作
- 尝试使jquery工作
- RegEx不与我的jQuery工作