jQuery在某个事件上捕获组件id

时间:2013-05-03 18:35:10

标签: jquery jsf-1.2

我有一些动态生成的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

1 个答案:

答案 0 :(得分:0)

JSF给我带来了一些问题。当我确实得到id时我的功能不起作用。这是因为表单,我需要在元素名称中包含它,JS不会为你做。我需要做三件事:

  • 更改已编辑组件的背景颜色
  • 启用另一个组件(保存按钮)
  • 在页面上设置一个参数以捕获未保存的更改(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()}" 
 />