سؤال

أرغب في استخدام JavaScript لمعالجة حقول الإدخال المخفية في صفحة JSF/FaceLets. عند تحميل الصفحة ، أحتاج إلى تعيين حقل مخفي على عمق لون العميل.

من وجيلي:

<body onload="setColorDepth(document.getElementById(?????);">

<h:form>
  <h:inputHidden value="#{login.colorDepth}" id="colorDepth" />
</h:form>

عندما تقوم JSF بمعالجة الصفحة ، فإنها بالطبع تغيير معرفات العناصر. ما هي أفضل طريقة للرجوع إلى هذه العناصر من رمز JavaScript الخاص بي؟

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

المحلول

ستحتاج إلى تعيين معرف النموذج حتى تعرف ما هو عليه. بعد ذلك ، ستتمكن من إنشاء معرف العنصر الفعلي.

<body onload="setColorDepth(document.getElementById('myForm:colorDepth');">

<h:form id="myForm">
  <h:inputHidden value="#{login.colorDepth}" id="colorDepth" />
</h:form>

إذا كنت لا ترغب في تعيين حقل معرف النموذج ، فيمكنك العثور عليه في وقت التشغيل ، مثل ذلك:

<body onload="setColorDepth(document.getElementById(document.forms[0].id + ':colorDepth');">

نصائح أخرى

عرض مصدر HTML الذي تم إنشاؤه ونظر إلى ما اسمه JSF سمة المعرف للعلامة.

سترى قريبًا كيف تعمل اتفاقية التسمية. عادة ما يكون مثل اسم النموذج: اسم الميدان

يمكنك استخدام عنصر التحكم العميل كما عاد من قبل uicomponent.getClientId (facescontext). نرى هنا لعينة رمز.

حدد وظيفة findElement على مستوى العالم واستخدمها في كل مكان

function findElement(elementId) {
        if(document.getElementById(elementId)) return elementId;
        for(var  i = 0; i < document.forms.length; i++) {
            if(document.getElementById(document.forms[i].id + ':' + elementId)) {
                return document.forms[i].id + ':' + elementId;
            }
        }
        return null;
    }


    <body onload="setColorDepth(findElement('colorDepth'));">
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top