Как заморозить или отключить форму ввода обновления
-
21-09-2019 - |
Вопрос
Интересно, можно ли мне заморозить или отключить всю форму обновления?У меня есть входная форма h:form с флажком.когда пользователи устанавливают этот флажок, я хотел бы заморозить или отключить всю форму, чтобы запретить пользователям изменять входные данные.
Спасибо, я использую JSF, Spring Web Flow, Facelets и Trinidad.
Решение
Если вы хотите отключить только определенные входы, рекомендуется их перечислить:
function OptCheckBox(chkd) {
if (chkd == 'y') {
document.frm.input1.disabled = true;
document.frm.input2.disabled = true;
}
}
Другие советы
Вы хотели бы использовать JavaScript, чтобы отключить все входные данные формы, когда пользователь устанавливает флажок.Что-то вроде:
document.getElementById('id').disabled = true;
Вы должны сделать это для каждого элемента ввода, где «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;
}
}
}
Нет необходимости заранее знать идентификаторы, и это делает код JS универсальным и пригодным для повторного использования.
Надеюсь это поможет.