仅在启用javascript时隐藏元素

时间:2011-09-22 23:25:41

标签: asp.net-mvc-3 razor partial-views javascript

我有一个显示文本框的视图,如下所示:

@Html.TextBoxFor(m => m.CodeGuest, new {style = "display: none"})

它通过javascript显示(因此用户点击一个复选框)。

如果未启用javascript,我必须删除此行(style = "display: none"),以便默认显示文本框。

6 个答案:

答案 0 :(得分:5)

我输入此作为评论,因为它似乎很明显我认为其他人可以获得一些赞成,但是:

<noscript>
  <div>
    Hello YOU HAVE JAVASCRIPT TURNED OFF YOU BIG SILLY
  </div>
</noscript>

仅在禁用JavaScript时才会显示<noscript>标记的内容。

答案 1 :(得分:4)

您可以使用客户端逻辑,将其作为默认值显示,并在页面加载时使用javascript隐藏它。

如果你使用jQuery,它将是这样的:

$(function() {
    $('[name="CodeGuest"]').hide();
});

并从Razor逻辑中删除display:none。

另一种解决方案是将文本框元素包装在<noscript> - 标记中。

例如:

<noscript>
     @Html.TextBoxFor(m => m.CodeGuest)
</noscript>

答案 2 :(得分:3)

我通常处理这个问题的方法是在Dom加载时隐藏最初 WITH javascript的元素...这样,没有javascript =没有隐藏... < / p>

答案 3 :(得分:1)

我喜欢Pointy的回答,但这是一个简单的脚本选项:

<script type="text/javascript">
  document.write('<style type="text/css">#hideMe {display:none;}<\/style>');
</script>

虽然noscript元素很优雅,但它与特征和功能检测以及优雅降级的原则不一致。如果浏览器能够运行相关脚本,更好的策略是决定是否显示元素

上述建议也有同样的缺点。

答案 4 :(得分:1)

您可以使用JavaScript隐藏元素,因此默认情况下会显示该元素。 只有在执行JavaScript时,该元素才会被隐藏。

我不知道你的代码生成了什么标记,但是使用JavaScript你可以做类似的事情(对于一个简单的例子,当元素得到一个id时):

elem = document.getElementById(id);
elem.style.display = 'none';

因此,当启用JavaScript时,它将被隐藏。在执行脚本之前,请务必等待,直到DOM完全加载,否则最终可能无法执行任何操作。

对于DOM-Manipulation,我倾向于使用jQuery,它有一个很好的DOM-ready Listener和简单的元素选择。

答案 5 :(得分:1)

我通常喜欢这样做,以避免在使用JS隐藏解决方案时在长页面上闪烁内容,就是在CSS中添加这样的内容:

html.jsEnabled #CodeGuest {display: none;}

然后在JS中,只需添加:

document.getElementsByTagName('html')[0].className += ' jsEnabled';

优点是,即使在DOM准备就绪之前,您也可以运行该位代码,因为HTML标记已经可用。另外,我可以将该课程用于我可能想到的任何其他渐进增强。

相关问题