【问题标题】:jQuery capture component id on some eventjQuery在某些事件上捕获组件ID
【发布时间】:2013-04-28 05:53:47
【问题描述】:

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

【问题讨论】:

  • 试试这个:function somebodyChangedMe(item) { alert(item.id); }。收到任何警报?
  • 这给了我一个以“未定义”作为文本的弹出窗口。从头开始,它确实给出了 id。

标签: jquery jsf-1.2


【解决方案1】:

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()}" 
 />

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 2016-12-27
    相关资源
    最近更新 更多