سؤال

خلفية

لدي هذا النموذج الذي يستخدم JavaScript حصريا للبحث من خلال الإدخالات ~ 5K (الموردين) وملء الدورة المنسدلة المختارة منها (المصانع، ~ إدخالات 10K). الآن، إنه نموذج جافا سكريبت المطلوب. أود أن أقوم بذلك حتى لم تعد أخطاء JavaScript تجعل النموذج غير قابل للاستخدام، ولكن عدد الإدخالات والطبيعة المتسلسلة للإدخالات تتركني دون طريقة اصطلاحية لتوفير إصدار HTML فقط.

القضايا


التسلسلات التسلسلية / التسلسل الهرمي

مثال على المنسدلة حيث التسلسل مهم:http://www.javascriptkit.com/javatutors/selectcontent2.shtml.

بحيث يظهر "تصفية" محتوى المنسدلة التسلسلية / التسلسل الهرمي، حيث يتم ترشيح الاختيارات في القائمة المنسدلة الثانية على أساس الاختيارات في القائمة المنسدلة الأولى. ولكن يسلب جافا سكريبت، ويمكن أن يصبح فوضى على الفور. مدريد في الولايات المتحدة الأمريكية؟ برلين في فرنسا؟ التسلسل يصبح تالفا.

المنسدلة التي لها أعداد هائلة من الخيارات

إذا كان لديك منسدلة مختارة مع خيارات 10K الممكنة، فمن السهل تصفية / البحث من خلالها مع JavaScript. التعامل مع تلك الخيارات دون Javacript، من ناحية أخرى، هو أكثر صعوبة بكثير.

كيف يمكنك أن تقدم للمستخدمين ذوي جميع الاحتمالات عند تحميل جميع الخيارات التي ستفجيرها جميعا متصفحهم؟


الحلول الممكنة

مربعات الاختيار التسلسلية / التسلسل الهرمي:

  • نماذج من جانب خادم 2 جزء.
  • ؟ حدد مجموعات الخيارات؟
  • ???

يختار بأرقام ضخمة من الخيارات:

  • نماذج البحث من جانب الخادم 2.
  • تبحث عن نص جانب الخادم مطابقة أسماء الدخول.
  • ???

روابط بسيطة للحلول الحيلة ترحيب.

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

المحلول

الحل الوحيد الذي يمكنني التفكير فيه هو استخدام نموذج تقديم في كل مرة تحتاج إلى تضييق نتائجك. تبدأ في إظهار صفحة لتحديد بلد المورد. التي تقدم، وإرجاع صفحة تظهر للبلد المحدد كنص، والآن لديه انخفاض إلى أسفل لتحديد الحقل التالي، مثل المدن. بهذه الطريقة، الخادم يمكن أن تفعل التصفية في كل مستوى.

إليك مثال JSP:

<c:choose>
    <c:when test="${empty country}">
        Country: 
        <form>
            <select>
                <option value="USA">America</option>
                <option value="DEU">Germany</option>
                <%-- ... --%>
            </select>
        </form>
    </c:when>
    <c:otherwise>
        Country: ${country} 
        <c:choose>
            <c:when test="${empty city}">
                <input type="submit" value="Change" />   <%-- Button to change the previous value --%>

                <%-- your form for choosing a supplier's city --%>                    
            </c:when>
            <c:otherwise>
                <%-- continue filtering until you have all of the data --%>
            </c:otherwise>
        </c:choose>

    </c:otherwise>
<c:choose>

عند تحديد بلد، يقدم النموذج. يدعي الخادم الخاص بك البلد، وإرجاع نفس الصفحة مع country القيمة الميدانية وقائمة بالمدن الممكنة للانسحاب المقبل. القيام بذلك مثل هذا يتيح لك الاعتماد فقط على النموذج يقدم (بدلا من جافا سكريبت) لتصفية البيانات بالتتابع. سيكون الخادم الخاص بك مسؤولا عن تتبع مدى طول المستخدم. السقوط الواضح لهذا الحل هو أن JSP سيكون فوضوي جدا، مع كل المتداخل <c:choose> كتل.

قد تحاول أيضا محلول هجين: عندما يتم تحميل الصفحة، اكتشف ما إذا كانت جافا سكريبت قد تم تحميلها. إذا كان الأمر كذلك، استبدل نماذج التقديم الخاصة بك باستخدام HTML عادي يحتوي على AJAX خلفه بملء المجموعة التالية من الخيارات. بهذه الطريقة، لا يتعين على صفحتك تحديث مجموعة من المرات عند جافا سكريبت هل تحميل، ولكن سوف لا تزال تعمل إذا جافا سكريبت لا حمل. مجرد فكرة.

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