سؤال

هل هناك حدث عميل يمكنني استخدامه عندما يتم تحميل/ربط بيانات DropDownList بعنصر التحكم؟أحتاج إلى إطلاق حدث من جانبهم عندما يحدث هذا.


في الأساس، أحاول إغلاق عناصر التحكم أثناء تحميل البيانات كما لو كان هناك تباطؤ (ليس من غير المألوف) حيث يمكن للمستخدم البدء في إدخال البيانات ثم فقدان التركيز أثناء الكتابة.

لقد حاولت القيام بذلك في العلامات ولكن يبدو أن الأساليب الموجودة هناك تتوقف عن العمل بعد إعادة النشر الأولى!(أي مساعدة سيكون موضع تقدير كبير).كحل بديل، حاولت ربط الأحداث بالعناصر نفسها، وبينما يعمل هذا للقفل، باستخدام حدث onchange، لا أستطيع إلغاء قفله عند تحميل البيانات بنجاح!

أيه أفكار؟شكرا على الإجابات حتى الآن :)

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

المحلول

ومنذ سيتم ربط البيانات على جانب الملقم، لم يكن لديك حدث من جانب العميل لذلك حدث معين، ولكن، واحد في الصفحة تمت المقدمة، سوف تكون البيانات هناك، لذلك قد ترغب في تشغيل العميل الخاص بك النصي في حال document.load، أو استخدام شيء من هذا القبيل حدث document.ready مسج ل. والتي تؤدي السيناريو الخاص بك لتشغيل مرة واحدة في الصفحة (بما في ذلك انخفاض ملزمة لأسفل) يتم الانتهاء من التحميل.

نصائح أخرى

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

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

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

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

  1. قم أولاً بتعيين علامة نص التحميل على setdopostback()

  2. أضف هذا في كتلة البرنامج النصي في الجسم.

        var boolDoPostBack = false;
    
        if (__doPostBack)
        {
           // save a reference to the original __doPostBack
           var __oldDoPostBack = __doPostBack;
    
          //replace __doPostBack with another function
          __doPostBack = AlwaysFireBeforeFormSubmit;
        }
        function setdopostback()
        {
            boolDoPostBack = true;
        }
        function AlwaysFireBeforeFormSubmit (eventTarget, eventArgument)
        {
            var x= document.readyState
    
            if (x != "complete")
            {
                if (x == "loading" || x == "interactive" || x == "unitialized" || x == "loaded")
                { 
                    //do nothing with IE postback
                }
                else if (!boolDoPostBack)
                {
                    //do nothing with FireFox postback
                }
                else
                {
                    //alert('Allow Postback 1');
                    return __oldDoPostBack (eventTarget, eventArgument);
                }
            }
            else
            {
                //alert('Allow Postback 2');
                return __oldDoPostBack (eventTarget, eventArgument);
            }       
        }
    
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top