1

我想知道我是否可以冻结或禁用整个更新表单?我有一个带有复选框的输入 h:form。当用户选中该框时,我想冻结或禁用整个表单,以禁止用户更改输入。

谢谢,我正在使用 JSF、Spring Web Flow、Facelets 和 Trinidad。

4

3 回答 3

2

当用户选中复选框时,您可能希望使用 javascript 将所有表单输入设置为禁用。就像是:

document.getElementById('id').disabled = true;

您将为每个输入元素执行此操作,其中“id”是该元素的 ID。

于 2009-12-23T17:40:49.790 回答
1

如果您只想禁用某些输入,最好枚举它们:

function OptCheckBox(chkd) {
 if (chkd == 'y') {
  document.frm.input1.disabled = true;
  document.frm.input2.disabled = true;
 }
}
于 2009-12-23T17:47:20.507 回答
0

您不能一次禁用整个表单。您确实需要禁用每个输入元素。基本上有两种方法可以实现这一点。

第一种方法是在单击复选框时使用 Javascript 将表单提交到服务器,这样您就可以使用 JSF 组件的disabled属性来禁用元素。这是一个基本示例:

<h:form>
    <h:selectBooleanCheckbox value="#{bean.freeze}" onclick="submit()" />
    <h:inputText value="#{bean.value1}" disabled="#{bean.freeze}" />
    <h:inputText value="#{bean.value2}" disabled="#{bean.freeze}" />
    <h:inputText value="#{bean.value3}" disabled="#{bean.freeze}" />
</h:form>

这里#{bean.freeze}应该指向一个boolean属性。

第二种方法是为此编写一个 Javascript 函数。这不需要表单提交,让您免于一个 HTTP 请求-响应周期,这对用户体验更好。

<h:form>
    <h:selectBooleanCheckbox onclick="disableForm(this)" />
    <h:inputText value="#{bean.value1}" />
    <h:inputText value="#{bean.value2}" />
    <h:inputText value="#{bean.value3}" />
</h:form>

JS函数disableForm()基本很简单。只需将复选框作为函数参数传递,this这样您就可以通过 获取父表单checkboxElement.form,然后通过 获取所有表单元素form.elements。您只需要确保您没有禁用复选框本身,以便您可以再次重新启用表单:)

function disableForm(checkboxElement) {
    var elements = checkboxElement.form.elements;
    for (var i = 0; i < elements.length; i++) {
        var element = elements[i];
        if (element != checkboxElement) {
            element.disabled = checkbox.checked;
        }
    }
}

无需事先知道 ID,这使得 JS 代码具有通用性和可重用性。

于 2009-12-23T20:12:20.190 回答