0

我有以下 javascript

function toggle_profile(source, target) {
    var ele = document.getElementById(target);
    var text = document.getElementById(source);
    if (ele.style.display == "block") {
        ele.style.display = "none";
        text.innerHTML = "+  ";
    } else {
        ele.style.display = "block";
        text.innerHTML = "-  ";
    }
}

以下是在html中:

 <c:forEach items="#{inventory.categories}" var="c">
       <a id="#{c.name}" href="javascript:toggle_profile(#{c.name}, #{c.name}div);">+ </a>
<h:outputText value="   " />
       <h:commandLink action="#{inventory.getBooks(c)}" value="#{c.name}" style="font-weight: bold" />
       <br />
       <div id="#{c.name}div" style="display: none">
           <c:forEach items="#{c.subCategories}" var="s">
               <i> <h:commandLink action="#{inventory.getBooks(s)}" value="#{s.name}" />
               </i>
               <br />
           </c:forEach>
           <br />
       </div>
   </c:forEach>

文本显示成功,但 + 链接不执行任何操作。

4

2 回答 2

1

尝试通过以下方式更改您的javascript函数,

function toggle_profile(source, target) {
var ele = document.getElementById(target);
var text = document.getElementById(source);
if (ele.style.display == "none") {
    ele.style.display = "block";
    text.innerHTML = "-  ";
} else {
    ele.style.display = "none";
    text.innerHTML = "+  ";      
}

}

于 2013-05-08T19:52:15.300 回答
1

<h:commandLink>以错误的方式使用。首先,它没有href属性:它将由 JSF 生成,并且永远是#,所以实际上你的 JS 代码永远不会被调用。其次,它旨在通过绑定onclick处理程序发布表单,而不是进行一些 JavaScript 操作。

要做你想做的事,只需使用一个普通的 HTMLa元素,甚至是一个div带有指定 onclick 处理程序的元素。

于 2013-05-05T21:08:43.973 回答