有没有办法动态更改按钮的CSS类?

时间:2009-02-05 15:05:12

标签: css wicket

我正在开发基于Wicket的Web应用程序。在应用程序中,有一些按钮并非每个用户都有权使用。这些按钮实际上是简单的链接,例如

<a wicket:id="publishButton" title="Publish" class="rightPanel_publish"><wicket:message key="publish"/></a>

使用CSS类(来自外部CSS文件)设置其视觉外观,例如

a.rightPanel_publish {
    display: block;
    width: 90px;
    height: 27px;
    background: url( ../imgs/right_panel_icon03.gif ) left top repeat-y;
    text-decoration: none;
    color: black;
    padding: 12px 0px 0px 35px;
}

当用户无权使用该按钮时,链接被禁用(使用Java),并且由于某种原因,CSS不再使用。

我的问题是这样的:有没有办法确定在运行时禁用链接并更改CSS类?我宁愿避免使用javascript(设法保持整个项目JS免费到目前为止...),并且更喜欢适用于所有浏览器的东西。

非常感谢,

Yuval = 8 - )

5 个答案:

答案 0 :(得分:3)

不幸的是,我不知道如何在没有JS的情况下更改按钮的页面。页面加载后,CSS,Java和其他所有内容都会在页面加载后运行,与页面交互的唯一方法是通过JS。

然而,这里的JS适用于任何浏览器(IE 6 +,Safari,Opera,FF等),

  if(document.getElementById('foo'))
  {
    document.getElementById('foo').className='bar';
  }

答案 1 :(得分:1)

如果没有某种脚本,就没有办法做到这一点。 “DHTML”中的“D”代表“Javascript”:P


编辑:实际上,既然你说某些东西正在禁用链接/按钮,那么某些东西可能/也应该附加一个“禁用”类(唯一的x浏览器方式让CSS注意到)相同的元素。运行时切换不会进入它 - 如果一个东西正在改变状态,它需要彻底完成。

答案 2 :(得分:1)

Wicket链接替换&lt; a&gt;标记为&lt; span&gt;禁用时。

在应用CSS时请记住这一点,例如:

.rightPanel_publish_button {
  display: block;
  width: 90px;
  height: 27px;
  background: url( ../imgs/right_panel_icon03.gif ) left top repeat-y;
  text-decoration: none;
  color: black;
  padding: 12px 0px 0px 35px;
}

答案 3 :(得分:1)

您还可以根据用户身份验证状态,使用AttributeModifier更改按钮的外观(即css类):

myButton.add(new AttributeModifier("class", new AbstractReadOnlyModel<String>() {

        private static final long serialVersionUID= 1L;

        @Override
        public String getObject () {
            if (!isAuthorized()) {
                return "rightPanel_unauthorized";
            }
            return "rightPanel_publishbutton";
        }
    }));

在CSS中,您可以根据需要定义“.rightPanel_unauthorized”样式。

答案 4 :(得分:0)

我使用*.setVisible(Boolean boolean)

它适用于Wicket中的WebMarkupContainer模型。 可以基于用户角色在类的其他位置分配setVisible()。所以你可能不得不寻找它......