我有一些动态生成的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
答案 0 :(得分:0)
JSF给我带来了一些问题。当我确实得到id时我的功能不起作用。这是因为表单,我需要在元素名称中包含它,JS不会为你做。我需要做三件事:
所以我最终得到了以下内容:
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()}"
/>