0

我有一个包含很多 div 的网站,并且这个 javascript 函数可以通过单击链接来打开它。现在我想添加功能以在打开新 div 时关闭所有其他 div

我还想通过按 esc 键来关闭 div。

某人可以帮我完成它吗?

 function toggleDiv(divid){
        var div = document.getElementById(divid);
        div.style.display = div.style.display == 'block' ? 'none' : 'block';
        }
html part:
<a href=javascript:toggleDiv('div_name'); >
4

2 回答 2

3

我不会编写所有的香草 JS 代码,特别是因为你没有明确禁止暗示 jquery 的建议——所以这里的一切都是通用的。这是我将如何处理它:

1)适用于所有“togglable” div,要么是“togglediv”类,要么是数据属性元素(在大多数情况下,在分配动态功能时,我更喜欢使用数据属性元素的方式,但在这种情况下是类可能更可取)。

2) 在 doc-load 上,获取所有这些 div 并将它们存储在一个数组中。

3)一旦你有了你的数组,循环遍历它并将指向“toggle”函数的onclick应用到数组中的每个div。

4) 切换函数应首先循环遍历该 div 数组,并将“关闭”类应用于每个元素。您可以使用 CSS 将 display:none 应用于所有分类为“.togglediv.closed”的 div。“.togglediv”类本质上应该是可见的。之后,它确保目标 div 没有应用“封闭”类。

5) 将 onkeypress 事件应用于调用“toggle”函数的文档正文(或可能的最具体的元素,例如您的包装器,如果有的话)。如果您正确编写“切换”功能,如果没有元素通过它知道循环中的 CLOSE ALL DIVS 的事件传递给它,那么您的转义键功能已经内置。

这个伪代码应该足以让你开始。如果您需要更多帮助,请告诉我。

Protip:在这里使用“渐进式增强”是一件轻而易举的事-在此代码的文档加载部分中,请确保在获取该数组时循环该数组并将它们全部设置为“关闭”(或隐藏或您想要的任何类)以便它们默认隐藏。不要在隐藏状态下加载带有这些元素的文档,因为没有 JS 的用户会看到一个损坏的站点(booooooo!) - 相反,一旦您使用 javascript 加载了文档(yaaaay!),使用渐进增强来隐藏 div

干杯!

于 2013-06-06T17:48:42.053 回答
0

HTML 元素不一定要设置样式属性(如果它们没有 HTML 样式属性并且没有 CSS 规则匹配)。

找出元素是否在屏幕上占用空间的一种方法是测试clientHeightclientWidth.

对于 Esc 键,您必须为“keydown”或“keyup”事件类型添加事件侦听器(因为“keypress”不会触发不产生字符的键)。

'keydown' 或 'keyup' 返回的值对于国际键盘来说是非常不可靠的。

我在德语键盘上为“keydown”或“keyup”得到这个 Esc:

charCode: 0
clipboardData: undefined
ctrlKey: false
currentTarget: null
defaultPrevented: false
detail: 0
eventPhase: 0
keyCode: 27
keyIdentifier: "U+001B"
...
type: "keydown"

请注意,charCode 为 0,但 keyCode 和 keyIdentifier 的 unicode 表示法都报告 Esc 键。

http://www.fileformat.info/info/unicode/char/1b/index.htm

于 2013-06-06T18:17:46.220 回答