5

我正在尝试在单击按钮时执行 JavaScript,同时在后台设置属性。执行 JS 代码有效,但不会调用属性操作侦听器。但是,当我删除 onclick 属性时,单击命令按钮时会在后台设置属性。我也尝试过使用 actionListener。但同样的问题。这是我的 JSF 代码:

<rich:dataTable value="#{bean.items}" var="item">
  <rich:column>
    <a4j:commandButton value="Upload" onclick="Richfaces.showModalPanel('p-id');return false;">
       <f:setPropertyActionListener target="#{bean.targetId}" value="#{item.id}" />   
   </a4j:commandButton>
 </rich:column>
 // more columns
</rich:dataTable>

我在这里错过了什么吗?

4

1 回答 1

3

<a4j:commandButton>组件生成一个 HTML<input type="submit">元素以及一堆与当前问题无关的 ajax 魔法的 JS 代码。

组件的onclick属性生成为onclick同一个 HTML 元素的属性。该onclick属性通常指的click是在特定 HTML 元素上触发 HTML DOM 事件时执行的一些 JavaScript 代码。当最终用户单击 HTML 元素时立即触发此事件,这发生调用 HTML 元素的默认操作(提交父表单)之前。更重要的是,默认操作可以由 JavaScript 代码的布尔结果控制。如果返回false,则不会执行默认操作。这就是您的情况。

如果你想同时调用onclick属性中的 JavaScript 代码HTML 元素的默认操作<input type="submit">,那么你必须 return true,或者干脆删除这return false;部分。

于 2012-04-12T01:08:09.480 回答