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

フォーム全体を一度に無効にすることはできません。各入力要素を無効にする必要があります。これを実現するには、基本的に 2 つの方法があります。

最初の方法は、チェックボックスがクリックされたときに 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ます。

2 番目の方法は、このための Javascript 関数を作成することです。これにより、フォームの送信が不要になり、HTTP 要求と応答の 1 つのサイクルから解放され、ユーザー エクスペリエンスが向上します。

<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.formform.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 に答える