سؤال

أتساءل عما إذا كان من الممكن بالنسبة لي تجميد أو تعطيل نموذج التحديث بأكمله؟ لدي إدخال H: نموذج مع خانة الاختيار فيه. عندما تحقق المستخدمين من المربع ، أود تجميد النموذج بأكمله أو تعطيله بحيث لا يسمح للمستخدمين من تغيير المدخلات.

شكرًا ، وأنا أستخدم JSF ، و Spring Web Flow ، و Saceelets ، و Trinidad.

هل كانت مفيدة؟

المحلول

إذا كنت ترغب في تعطيل مدخلات معينة فقط ، فمن الجيد تعدادها:

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

نصائح أخرى

قد ترغب في استخدام JavaScript لتعيين جميع مدخلات النموذج لتعطيلها عندما يتحقق المستخدم من خانة الاختيار. شيء مثل:

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

ستفعل ذلك لكل عنصر إدخال حيث يكون "المعرف" هو معرف هذا العنصر.

لا يمكنك تعطيل نموذج كامل مرة واحدة. تحتاج حقًا إلى تعطيل كل من عناصر الإدخال. هناك أساسا طريقتان لتحقيق ذلك.

أول طريقة هي استخدام 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 عامًا وقابلًا للاستخدام.

أتمنى أن يساعدك هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top