示例小提琴 - http://jsfiddle.net/S6CwT/
.CSS
#service_container {
display: none;
}
.HTML
<a href="/services/update/8" id="view_service">View Service Record</a>
<div id="service_container">
Test
</div>
jQuery
jQuery.noConflict();
jQuery(function() {
// toggle visibility of service section
jQuery('#view_service').click(function() {
jQuery('#service_container').slideToggle('slow');
// toggle text
if (jQuery('#service_container').is(':visible')) {
jQuery('#view_service').text('Hide Service Record');
} else {
jQuery('#view_service').text('View Service Record');
}
return false
});
});
错误是第一次单击链接时,链接文本将正确更改为Hide Service Record
但在后续单击时,当div
隐藏时,文本不会更改为Show Service Record
,当容器再次可见时,文本不会变为Hide Service Record
。
一定是我没发现但看不出我做错了什么的傻事。
我使用 is(:hidden)
以相反的方式尝试了它,但行为方式相同。
试试这个
jQuery(function() {
jQuery("#service_container").hide();
// toggle visibility of service section
jQuery('#view_service').click(function()
{
// toggle text
if (jQuery('#service_container').is(':visible'))
{
jQuery('#view_service').text('View Service Record');
}
else
{
jQuery('#view_service').text('Hide Service Record');
}
jQuery('#service_container').slideToggle('slow');
return false
});
});
工作演示
if (jQuery('#view_service').html()=="View Service Record") {
小提琴 : http://jsfiddle.net/S6CwT/2/
我比较#view_service
的html
尝试使用"on"事件对任何事件进行将来的更改,如下所示
jQuery('#view_service').on("click",function() {
// your code..
}
试试这个,在 if 语句中显示/隐藏
if (jQuery('#service_container').is(':visible')) {
jQuery(this).text('View Service Record');
jQuery('#service_container').hide('slow');
} else {
jQuery(this).text('Hide Service Record');
jQuery('#service_container').show('slow');
}
演示
当提出问题时,"#service_container"是可见的,因为它在slideToggle()
完成之前是不可见的。一种解决方案是将更改名称的逻辑作为函数传入,以便在slideToggle()
完成后运行。
...
var changeText = function() { <visibility text change logic> };
jQuery('#service_container').slideToggle('slow', changeText);
...
编辑:参考保存的小提琴。
完整代码:http://jsfiddle.net/rqGBb/1/
如果您希望文本在单击时立即更改,则必须在变量中自行跟踪"显示/隐藏"状态,悬挂元素或在外部if
块中测试可见性。