我试图通过单击另一个元素来显示/隐藏一个元素。为简单起见,我将每个 div 称为 A、B、C 或 D(如标记所示)。到目前为止我所拥有的示例可以在这里查看: http://jsfiddle.net/Yh8Ar/1/< /a>.所以我...
<div id="event">
<div id="structure1">...</div> // A
<div class="structures">...</div> // B
<div id="structure2">...</div> // C
<div class="structures">...</div> // D
// more of these div pairs down here
</div>
...并且我希望功能是这样的,当我单击 div A 时,div B 在可见和隐藏之间切换( show()/hide() )...但是...我也每当我单击窗口中的其他任何位置(单击 div B 本身除外)时,希望 div B(当可见时)隐藏。另一个 div 对 (C,D) 也是如此...单击 C、D 切换并单击页面上的任意位置将隐藏 D。
这里棘手的部分是,如果显示 div B,而我单击 div C,I希望 div B 隐藏,div D 显示。因此,单击页面上除 div B、D 之外的任何位置都会隐藏 div B、D。但我还希望能够通过重复单击 div A 来切换 div B,以及通过重复单击 div C 来切换 div D。一次只能显示一个 div。
到目前为止,我拥有的 jQuery,感谢 Nick Craver,是……
$(function() {
$(document).click(function() {
$('.structures').hide();
});
$('#fraction').click(function(event) {
event.stopPropagation();
$(this).next().toggle();
});
$('.structures').click(function(event) {
event.stopPropagation();
});
});
但我无法弄清楚如何区分 div 对,也就是说,我无法弄清楚如何隐藏 div B 和显示 div D 单击 div C 时。以下是它现在如何工作的示例以及所有相应的代码: http://jsfiddle .net/Yh8Ar/1/
谢谢,
赫里斯托
I'm trying to show/hide an element by clicking on another. For simplicity, I am going to refer to each div as either A, B, C, or D, as labeled. An example of what I have so far can be viewed here: http://jsfiddle.net/Yh8Ar/1/. So I have...
<div id="event">
<div id="structure1">...</div> // A
<div class="structures">...</div> // B
<div id="structure2">...</div> // C
<div class="structures">...</div> // D
// more of these div pairs down here
</div>
... and I want the functionality to be such that when I click on div A, div B toggles between visible and hidden ( show()/hide() )... BUT... I also want div B, when visible, to hide whenever I click anywhere else in the window, except for clicking div B itself. The same goes for the other div pair (C,D)... click on C, D toggles and clicking anywhere on the page will hide D.
The tricky part here is if div B is displayed and I click on div C, I want div B to hide and div D to show. So, clicking anywhere on the page EXCEPT FOR on divs B,D will hide divs B,D respectfully. But I also want to be able to toggle div B by repeatedly clicking on div A as well as toggling div D by repeatedly clicking on div C. Only one div should be displayed at a time.
The jQuery I have so far, thanks to Nick Craver, is...
$(function() {
$(document).click(function() {
$('.structures').hide();
});
$('#fraction').click(function(event) {
event.stopPropagation();
$(this).next().toggle();
});
$('.structures').click(function(event) {
event.stopPropagation();
});
});
... but I can't figure out how to distinguish between the div pairs, meaning, I can't figure out how to hide div B and show div D when clicking on div C. Here's an example of how it works now and all the appropriate code: http://jsfiddle.net/Yh8Ar/1/
Thanks,
Hristo
发布评论
评论(2)
您可以组合处理程序,但还需要添加一个处理程序,如下所示:
当单击
#structs
div 本身(以及单击处理程序已经停止按钮本身的隐藏),您可以在此处测试。如果您想让按钮成为切换按钮,请更改
.show()
到.toggle()
。You can combine your handlers but you need to add one as well, like this:
This also stops the event propagation when clicking inside the
#structures
div itself (as well as the click handler already stopping the hide from the button itself), you can test it here.If you want to have the button be a toggle instead, change
.show()
to.toggle()
.一些事情:
将相关的 div 分组到一个容器中可能会很有用:
这样您就可以保持独特的事物的唯一性(使用
id
)和通用的事物(使用class
)代码>)。这将帮助您处理 jQuery 事件。这是一个简单的示例(未经测试):.siblings
调用是对 div 进行分组的原因,因为它将搜索空间限制为仅分组的内容。实际上,使用自定义事件可能会更干净,而不是尝试将所有内容都放入标准点击处理程序中。查看 bind 和 触发 jQuery 文档。
Couple things:
It might be useful to group your related divs into a container:
This way you keep the unique things unique (with an
id
) and the general things general (with aclass
). This will help you with your jQuery events. This is a quick example (untested):The
.siblings
call is why it's useful to group your divs since it limits the search space to just the grouped content.Really though, it would probably be much cleaner to use custom events instead of trying to fit everything in to the standard click handler for this. Check out the bind and trigger jQuery docs.