0

我有一些动态生成的 rich:calendar 和 h:selectBooleanCheckbox 组件,它们具有动态生成的 id,我需要对其进行脏检查。当用户尝试离开页面而不保存更改时,弹出框应该警告他们。但我只想检查特定组件。

我创建了一个 jquery 函数:

 <script type="text/javascript">
 function somebodyChangedMe(item) {
    var id = $(item).attr("id");
    alert(id);
}
  </script>

这是我最初的尝试,我只想捕捉事件,如果我能让它工作,我会用它来设置一个变量以供另一个函数使用。

在我添加的组件中:

 <h:selectBooleanCheckbox id="upd_ckbx_#{status.index}"
     onchange="somebodyChangedMe(this);"
     value="#{_parent.id[status.index].ignore}">
     <a4j:support event="onclick"ajaxSingle="true" 
       actionListener="#{someRandomListener}" /> 
 </h:selectBooleanCheckbox>

但是当我选择复选框时,什么也没有发生。我尝试使用 onclick 和 onkeyup,结果相同。我可以这样做吗?我究竟做错了什么?我正在使用 Seam 2.2 JSF 1.2 和 RichFaces 3.3.3

4

1 回答 1

0

JSF 给我带来了一些问题。当我确实获得 id 时,我的功能将无法正常工作。是因为形式,我需要在元素名称中包含它,JS不会为你做。我需要做 3 件事:

  • 更改已编辑组件的背景颜色
  • 启用另一个组件(保存按钮)
  • 在页面上设置参数以捕获未保存的更改(dataChanged)

所以我最终得到了以下结果:

 function dirtyEnableUpdate(itemChanged,elem) {
    dataChanged = 1;  
    jQuery(itemChanged).parent().addClass("redBackground");
    if (typeof elem === "string") {
       console.log("i'm setting value here to " + elem);
       document.getElementById(elem).disabled=false;
    } 
 }

在我编辑的组件中:

 <rich:calendar id="dcal" 
      value="#{programEventHome.instance.eventDate}"
   onchanged="dirtyEnableUpdate(this,'form:idOFComponentToEnable');" 

/>

必须启用的组件:

 <a4j:commandButton id="idOFComponentToEnable"
  value="Update"
  oncomplete="disableItAgain('form:idOFComponentToEnable'); 
  action="#{class.doStuffHere()}" 
 />
于 2013-12-04T22:31:02.180 回答