Как заморозить или отключить форму ввода обновления - PullRequest
1 голос
/ 23 декабря 2009

Интересно, можно ли мне заморозить или отключить всю форму обновления? У меня есть вход h: form с флажком когда пользователи устанавливают флажок, я бы хотел заблокировать или отключить всю форму, чтобы запретить пользователям изменять входные данные.

Спасибо, и я использую JSF, Spring Web Flow, Facelets и Тринидад.

Ответы [ 3 ]

2 голосов
/ 23 декабря 2009

Вы хотели бы использовать javascript, чтобы отключить все входные данные формы, когда пользователь установит флажок. Что-то вроде:

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

Это можно сделать для каждого элемента ввода, где «id» - это идентификатор этого элемента.

1 голос
/ 23 декабря 2009

Если вы хотите отключить только определенные входы, рекомендуется перечислить их:

function OptCheckBox(chkd) {
 if (chkd == 'y') {
  document.frm.input1.disabled = true;
  document.frm.input2.disabled = true;
 }
}
0 голосов
/ 23 декабря 2009

Вы не можете отключить всю форму сразу. Вам действительно нужно отключить каждый из элементов ввода. Есть два основных способа добиться этого.

Первый способ - использовать Javascript для отправки формы на сервер при нажатии флажка, чтобы можно было использовать атрибут disabled компонента JSF для отключения элементов. Вот базовый пример:

<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;
        }
    }
}

Не нужно заранее знать идентификатор, и это делает код JS универсальным и может использоваться повторно.

Надеюсь, это поможет.

...