在页面加载时隐藏 DIV,然后在按下单选按钮时显示它们
Hide DIVs while page loads, then show them when Radio Buttons are pressed
我有 3 个单选按钮,分别称为“简单”、“中等”和“困难”。每个都链接到一个单独的 Javascript 函数。这些函数显示一个 div 而隐藏另外两个 divs.
这样做的目的是让用户能够选择一个选项并查看该选项的 div,例如,如果他们按下“简单”单选按钮,那么“简单”div 应该显示,“中等”和“困难”div 应该隐藏。
一周以来我一直在努力让它工作,我想我已经尝试了所有关于 Whosebug 的相关建议,但我希望我遗漏了一些小东西。
这些是我的单选按钮 HTML:
<td width="100"><div align="center" class="radio">
<input type="radio" name='thing' value='valuable' id="easy" onclick="showEasy()"/></div>
</td>
<td width="100"><div align="center" class="radio">
<input type="radio" name='thing' value='valuable' id="medium" onclick="showMedium()"/></div>
</td>
<td width="100"><div align="center" class="radio">
<input type="radio" name='thing' value='valuable' id="hard" onclick="showHard()"/></div>
</td>
这些是我想要的 DIVshow/hide:
<td colspan="8" rowspan="12" align="center">
<div align="center" id="easyDIV"><img src="/images/pic1.jpg" alt="If you can see this, then the image didn't load properly." class="distort1" id="sample"/></div>
<div align="center" id="mediumDIV"><img src="/images/pic2.jpg" alt="If you can see this, then the image didn't load properly." class="distort2" id="sample1"/></div>
<div align="center" id="hardDIV"><img src="/images/pic3.jpg" alt="If you can see this, then the image didn't load properly." class="distort3" id="sample2"/></div>
</td>
这是我页面顶部的脚本,每个函数应该一次显示一个 DIV:
<script>
function showEasy()
{
$("#easyDIV").removeClass("displaynone");
//Make sure mediumDIV is not visible
$("#mediumDIV").addClass("displaynone");
//Make sure hardDIV is not visible
$("#hardDIV").addClass("displaynone");
}
function showMedium()
{
$("#mediumDIV").removeClass("displaynone");
//Make sure easyDIV is not visible
$("#easyDIV").addClass("displaynone");
//Make sure hardDIV is not visible
$("#hardDIV").addClass("displaynone");
}
function showHard()
{
$("#hardDIV").removeClass("displaynone");
//Make sure easyDIV is not visible
$("#easyDIV").addClass("displaynone");
//Make sure mediumDIV is not visible
$("#mediumDIV").addClass("displaynone");
}
</script>
我只想在开始时显示 Medium div,所以我将 showMedium();
设置为 运行 页面加载完成后,这成功地隐藏了 Easy 和辛苦 div 秒。问题是所有 3 div 都可见一两秒,直到每个页面元素都完成加载。加载所有内容后,showMedium();
运行 以及简单和困难 div 将被隐藏。
这对用户来说真的很糟糕,所以我一直在尝试找到一种方法来默认隐藏这两个 div,而只在开头显示中等 div .
我尝试了几种方法,我尝试通过将它们的 div 设置为 <div hidden>
来隐藏两个 div
我也试过通过将它们的样式设置为 display:none
来隐藏两个 div,如下所示:
<div align="center" id="easyDIV" style="display: none;"><img src="" alt="If you can see this, then the image didn't load properly." id="sample"/></div>
然后为了显示每个 div,我尝试将此样式更改为 display: inline
和 display: block
,方法是在上面的 Javascript 函数中包含执行此操作的代码。
这些尝试没有成功,2 divs 被成功隐藏(因为它们在页面加载时没有出现)但是每当我尝试点击简单或困难单选按钮时,同时Medium div 正确消失,它被一个空的 space 代替,这意味着 Easy 和 Hard div 仍然隐藏。
我不知道如何让它工作,这似乎是让单选按钮成功工作和 showing/hiding 正确 divs 的唯一方法,就是拥有所有3 load/appear 在页面加载时在屏幕上显示一两秒钟。我真的很感激任何关于让它按照我喜欢的方式工作的建议。我会尝试任何建议,并提前感谢您的帮助!
将 displaynone class 应用于您不想从一开始就显示的 classes,因为您所有的 javascript 完全重置 class 运行.
时所有有问题的 div
示例:
<td colspan="8" rowspan="12" align="center">
<div align="center" id="easyDIV" class="displaynone"><img src="" alt="If you can see this, then the image didn't load properly." id="sample"/></div>
<div align="center" id="mediumDIV"><img src="" alt="If you can see this, then the image didn't load properly." id="sample1"/></div>
<div align="center" id="hardDIV" class="displaynone"><img src="" alt="If you can see this, then the image didn't load properly." id="sample2"/></div>
</td>
您甚至可以在页面加载时删除代码 运行ning displayMedium()。
此外,编写一些逻辑来测试是否单击了单选按钮(如果返回 true)然后切换另一个按钮可能会更快 类。
获取每个输入的值:
var easy = $('easy:checked').val(),
medium = $('medium:checked').va(),
hard$('hard').val();
if(this.radiobutton == true){
medium.toggleClass(); }
else{
toggle some more classes
}
更新
我创建了一个包含插件的版本:
一些注意事项:
1) 我已将插件包含在 fiddle 中,您的代码位于该部分的底部。
2) 您使用的插件很旧...如果您需要使用它,请确保您也在页面上使用 jQuery 迁移:https://github.com/jquery/jquery-migrate/#readme(只需将其导入与常规 jQuery).
3) 问题是由插件的内部代码引起的。为了解决它,我没有使用 display:none
隐藏图像,而是使用 visibility:hidden
。这是不同的,因为 display:none
呈现页面,就好像该元素从一开始就不存在一样,visibility:hidden
隐藏了该元素,但它仍将占据页面上的 space。
4) 因为 visibility:hidden
在图像原本所在的页面上留下空白 spaces,我添加了一个包装器 <div>
(class .container
) 并使用 CSS 将所有三个图像放在彼此之上。由于一次只显示一张图片,所有图片都在预期位置(您可以通过删除我的新 CSS 样式来试用我的演示并查看效果)。
如果有帮助请告诉我!
我已经创建了一个解决方案的 JSFiddle 演示,但您应该知道您使用的许多技术现在已经过时并且不是最佳实践(例如 - 永远不要使用显示非表格信息的表格)。
在我的示例中,我更正了其中的一些内容:
最初加载页面时,我将 CSS 设置为仅显示所需的 div
元素。
之后,根据单选按钮选择动态显示和隐藏新的 div
元素。主要的偶数处理程序是:
$('.radio input').on('click', function(){
//Hide all image divs
$imageDivs.css('display','none');
//Then display the image div we want to see
//To find that out we'll get the id of the current radio button
var radioID = $(this).attr('id');
//And then we'll display that image div
$('#' + radioID + 'DIV').css('display','block');
});
如果这回答了您的问题,请告诉我:)
我有 3 个单选按钮,分别称为“简单”、“中等”和“困难”。每个都链接到一个单独的 Javascript 函数。这些函数显示一个 div 而隐藏另外两个 divs.
这样做的目的是让用户能够选择一个选项并查看该选项的 div,例如,如果他们按下“简单”单选按钮,那么“简单”div 应该显示,“中等”和“困难”div 应该隐藏。
一周以来我一直在努力让它工作,我想我已经尝试了所有关于 Whosebug 的相关建议,但我希望我遗漏了一些小东西。
这些是我的单选按钮 HTML:
<td width="100"><div align="center" class="radio">
<input type="radio" name='thing' value='valuable' id="easy" onclick="showEasy()"/></div>
</td>
<td width="100"><div align="center" class="radio">
<input type="radio" name='thing' value='valuable' id="medium" onclick="showMedium()"/></div>
</td>
<td width="100"><div align="center" class="radio">
<input type="radio" name='thing' value='valuable' id="hard" onclick="showHard()"/></div>
</td>
这些是我想要的 DIVshow/hide:
<td colspan="8" rowspan="12" align="center">
<div align="center" id="easyDIV"><img src="/images/pic1.jpg" alt="If you can see this, then the image didn't load properly." class="distort1" id="sample"/></div>
<div align="center" id="mediumDIV"><img src="/images/pic2.jpg" alt="If you can see this, then the image didn't load properly." class="distort2" id="sample1"/></div>
<div align="center" id="hardDIV"><img src="/images/pic3.jpg" alt="If you can see this, then the image didn't load properly." class="distort3" id="sample2"/></div>
</td>
这是我页面顶部的脚本,每个函数应该一次显示一个 DIV:
<script>
function showEasy()
{
$("#easyDIV").removeClass("displaynone");
//Make sure mediumDIV is not visible
$("#mediumDIV").addClass("displaynone");
//Make sure hardDIV is not visible
$("#hardDIV").addClass("displaynone");
}
function showMedium()
{
$("#mediumDIV").removeClass("displaynone");
//Make sure easyDIV is not visible
$("#easyDIV").addClass("displaynone");
//Make sure hardDIV is not visible
$("#hardDIV").addClass("displaynone");
}
function showHard()
{
$("#hardDIV").removeClass("displaynone");
//Make sure easyDIV is not visible
$("#easyDIV").addClass("displaynone");
//Make sure mediumDIV is not visible
$("#mediumDIV").addClass("displaynone");
}
</script>
我只想在开始时显示 Medium div,所以我将 showMedium();
设置为 运行 页面加载完成后,这成功地隐藏了 Easy 和辛苦 div 秒。问题是所有 3 div 都可见一两秒,直到每个页面元素都完成加载。加载所有内容后,showMedium();
运行 以及简单和困难 div 将被隐藏。
这对用户来说真的很糟糕,所以我一直在尝试找到一种方法来默认隐藏这两个 div,而只在开头显示中等 div .
我尝试了几种方法,我尝试通过将它们的 div 设置为 <div hidden>
我也试过通过将它们的样式设置为 display:none
来隐藏两个 div,如下所示:
<div align="center" id="easyDIV" style="display: none;"><img src="" alt="If you can see this, then the image didn't load properly." id="sample"/></div>
然后为了显示每个 div,我尝试将此样式更改为 display: inline
和 display: block
,方法是在上面的 Javascript 函数中包含执行此操作的代码。
这些尝试没有成功,2 divs 被成功隐藏(因为它们在页面加载时没有出现)但是每当我尝试点击简单或困难单选按钮时,同时Medium div 正确消失,它被一个空的 space 代替,这意味着 Easy 和 Hard div 仍然隐藏。
我不知道如何让它工作,这似乎是让单选按钮成功工作和 showing/hiding 正确 divs 的唯一方法,就是拥有所有3 load/appear 在页面加载时在屏幕上显示一两秒钟。我真的很感激任何关于让它按照我喜欢的方式工作的建议。我会尝试任何建议,并提前感谢您的帮助!
将 displaynone class 应用于您不想从一开始就显示的 classes,因为您所有的 javascript 完全重置 class 运行.
时所有有问题的 div示例:
<td colspan="8" rowspan="12" align="center">
<div align="center" id="easyDIV" class="displaynone"><img src="" alt="If you can see this, then the image didn't load properly." id="sample"/></div>
<div align="center" id="mediumDIV"><img src="" alt="If you can see this, then the image didn't load properly." id="sample1"/></div>
<div align="center" id="hardDIV" class="displaynone"><img src="" alt="If you can see this, then the image didn't load properly." id="sample2"/></div>
</td>
您甚至可以在页面加载时删除代码 运行ning displayMedium()。
此外,编写一些逻辑来测试是否单击了单选按钮(如果返回 true)然后切换另一个按钮可能会更快 类。
获取每个输入的值:
var easy = $('easy:checked').val(),
medium = $('medium:checked').va(),
hard$('hard').val();
if(this.radiobutton == true){
medium.toggleClass(); }
else{
toggle some more classes
}
更新
我创建了一个包含插件的版本:
一些注意事项:
1) 我已将插件包含在 fiddle 中,您的代码位于该部分的底部。
2) 您使用的插件很旧...如果您需要使用它,请确保您也在页面上使用 jQuery 迁移:https://github.com/jquery/jquery-migrate/#readme(只需将其导入与常规 jQuery).
3) 问题是由插件的内部代码引起的。为了解决它,我没有使用 display:none
隐藏图像,而是使用 visibility:hidden
。这是不同的,因为 display:none
呈现页面,就好像该元素从一开始就不存在一样,visibility:hidden
隐藏了该元素,但它仍将占据页面上的 space。
4) 因为 visibility:hidden
在图像原本所在的页面上留下空白 spaces,我添加了一个包装器 <div>
(class .container
) 并使用 CSS 将所有三个图像放在彼此之上。由于一次只显示一张图片,所有图片都在预期位置(您可以通过删除我的新 CSS 样式来试用我的演示并查看效果)。
如果有帮助请告诉我!
我已经创建了一个解决方案的 JSFiddle 演示,但您应该知道您使用的许多技术现在已经过时并且不是最佳实践(例如 - 永远不要使用显示非表格信息的表格)。
在我的示例中,我更正了其中的一些内容:
最初加载页面时,我将 CSS 设置为仅显示所需的 div
元素。
之后,根据单选按钮选择动态显示和隐藏新的 div
元素。主要的偶数处理程序是:
$('.radio input').on('click', function(){
//Hide all image divs
$imageDivs.css('display','none');
//Then display the image div we want to see
//To find that out we'll get the id of the current radio button
var radioID = $(this).attr('id');
//And then we'll display that image div
$('#' + radioID + 'DIV').css('display','block');
});
如果这回答了您的问题,请告诉我:)