【发布时间】:2012-02-23 16:38:36
【问题描述】:
On this page 两个开/关图标在表格中显示/隐藏两行之间切换。
jquery 跟踪是否显示行状态的机制是检查可点击文本是“显示”还是“隐藏”:
if ($(source).html() == "show") {
$(source).html("hide");
viewContainer.show();
}
else {
$(source).html("show");
viewContainer.hide();
}
我知道这对于常规的 <a href="...">show</a> 链接应该可以正常工作,其中有实际的“显示”或“隐藏”文本要检查和更改,但它也适用于没有任何文本的 <img> 标记可以在“隐藏”和“显示”之间交替。
为什么会这样?
我真正想做的是将 IMG ALT 文本与显示和隐藏的行一起切换。关于如何做到这一点的任何线索?
(顺便说一句,我尝试将代码放入http://jsfiddle.net/2Jj2w/2/,但在那里不起作用。有什么想法吗?)
===== 编辑 =======
感谢所有帮助过的人!
最终结果会切换 IMG ALT 属性并继续检查显示/隐藏状态, 和 IMG TITLE 标签也被切换。
使用正确的 jquery“prop”代替“attr”。
Placekittens 已实现。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js' type='text/javascript'><!--mce:0--></script>
<script type="text/javascript">
function toggleShowHide(id, source) {
viewContainer = $(id);
if ($(source).prop('alt') == "hidden") {
viewContainer.show();
$(source).prop('title', "Hide details");
$(source).prop('alt', "shown");
}
else {
$(source).prop('alt', "hidden");
viewContainer.hide();
$(source).prop('title', "Show details");
}
}</script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<a href="javascript:toggleShowHide('#row1', '#toggle_row1')" ><img src="http://placekitten.com/40/40" id="toggle_row1" alt="hide" title="Hide details" /></a> <a href="javascript:toggleShowHide('#row2', '#toggle_row2')" ><img src="http://placekitten.com/40/40" id="toggle_row2" alt="hide" title="Hide details" /></a>
<table border="1" width="200">
<tbody id="row1">
<tr>
<td>ROW1</td>
</tr>
</tbody>
<tbody id="row2">
<tr>
<td>ROW2</td>
</tr>
</tbody>
</table>
</body>
</html>
【问题讨论】:
-
我已经看到通过使用图像名称来完成此操作。同一张图片保存一次为 imagename_open.jpg 和 imagename_closed.jpg。然后你可以为这些名字添加一个事件,你就会知道你处于什么状态。
-
请在问题中包含相关代码。不要依赖 jsfiddle。
-
我猜它可以工作,因为您测试过的浏览器允许图像标签中包含 html 内容,即使这不是标准。
-
“为什么它有效?”:它没有。 'else' 总是触发。
-
@Prusse 谢谢!我仍然想知道为什么没有手动包装它就不起作用。 jsFiddle 文档指出“在此面板中输入的代码将放置在标题的脚本块中,即 之间。”
标签: javascript jquery