我不知道是否有可能对我来说,冻结或禁用整个更新形式?我有一个输入H:在一个复选框形成。当用户选中复选框,我想冻结或禁用整个表格,以便从变化的输入禁止用户。

谢谢,我使用JSF,Spring Web Flow的,Facelets和特立尼达和多巴哥。

有帮助吗?

解决方案

如果要禁用只有某些输入,这是一个好主意,一一列举:

function OptCheckBox(chkd) {
 if (chkd == 'y') {
  document.frm.input1.disabled = true;
  document.frm.input2.disabled = true;
 }
}

其他提示

您会想要使用JavaScript来的所有形式输入时,用户检查复选框设置为禁用。是这样的:

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

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

您不能一次禁用整个表格。你真的需要禁用每个输入元素。基本上有两种方式来实现这一点。

第一种方式是使用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代码一般的和可重复使用的。

希望这有助于。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top