سؤال

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

JavaScript, html, الخ كلها "المطبوخ" و المشفرة (أعتقد ، أنا مشوش قليلا على كيف تعمل هذه العملية) قبل أن يتم نشرها, لذلك أنا لا يمكن أن نعلق VS 2005 إلى أي ، و الحرائق لايت لا يعمل بشكل جيد.أيضا ، واجهة في إطارات (يع) ، لذلك بعض الأدوات الأخرى لا تعمل بشكل جيد.

الحرائق يعمل كبيرة في فايرفوكس, التي لا تواجه هذه المشكلة (ولا سفاري), لذلك أنا على أمل شخص ما قد بقعة شيئا "من الواضح" الخطأ في قانون بلدي سوف تلعب مع أي.هناك المزيد من المعلومات التي يمكن أن تعطى عن الغرابة ، ولكن دعونا نبدأ مع هذا.

في الأساس لدي وظيفة أن "ينهار" الجداول في رؤوس بجعل الجدول العادي الصفوف غير مرئية.لدي "onclick='toggleDisplay("theTableElement", "theCollapseImageElement")'" في <tr> الكلمات و الجداول تبدأ مع "class= "مغلقة"".

واحد من النقرات انهيار وتوسيع الجداول في FF & سفاري ، ولكن أي الجداول تتطلب عدة نقرات (على ما يبدو عدد عشوائي بين 1 و 5) لتوسيع.في بعض الأحيان بعد في البداية الحصول على "فتح" ، الجداول سوف توسيع وطي مع بنقرة واحدة لفترة قصيرة فقط في نهاية المطاف العودة إلى تتطلب عدة نقرات.أستطيع أن أقول من ما أستطيع أن أرى في Visual Studio أن وظيفة هو في الواقع يجري التوصل إليه في كل مرة.شكرا مقدما على أي نصيحة!

هنا هو رمز شبيبة:

bURL_RM_RID="some image prefix";
CLOSED_TBL="closed";
OPEN_TBL="open";
CLOSED_IMG= bURL_RM_RID+'166';
OPENED_IMG= bURL_RM_RID+'167';

//collapses/expands tbl (a table) and swaps out the image tblimg
function toggleDisplay(tbl, tblimg) {
    var rowVisible;
    var tblclass = tbl.getAttribute("class");
    var tblRows = tbl.rows;
    var img = tblimg;

    //Are we expanding or collapsing the table?
    if (tblclass == CLOSED_TBL) rowVisible = false;
    else rowVisible = true;

    for (i = 0; i < tblRows.length; i++) {
        if (tblRows[i].className != "headerRow") {
            tblRows[i].style.display = (rowVisible) ? "none" : "";
        }
    }

    //set the collapse images to the correct state and swap the class name
    rowVisible = !rowVisible;
    if (rowVisible) {
        img.setAttribute("src", CLOSED_IMG);
        tbl.setAttribute("class",OPEN_TBL);     
    }
    else {
        img.setAttribute("src", OPENED_IMG);
        tbl.setAttribute("class",CLOSED_TBL);
    }
}

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

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

المحلول

setAttribute لا يمكن الاعتماد عليها في IE.فإنه يعامل السمة الوصول إلى كائن الوصول إلى الملكية كما نفس الشيء ، ذلك لأن دوم ممتلكات 'الفئة' السمة يسمى 'className', قد تضطر إلى استخدام بدلا من ذلك على أي.

تم إصلاح هذه الأخطاء في IE8 beta, ولكن من الأسهل ببساطة استخدام دوم المستوى 1 HTML الملكية مباشرة:

img.src= CLOSED_IMAGE;
tbl.className= OPEN_TBL;

يمكنك أيضا القيام طاولة قابلة للطي في الأنماط التي سوف تكون أسرع و سيوفر عليك عناء الاضطرار إلى حلقة فوق صفوف الجدول في البرنامج النصي:

table.closed tr { display: none; }

نصائح أخرى

هل حاولت تغيير هذا الخط

tblRows[i].style.display = (rowVisible) ? "none" : "";

إلى شيء من هذا القبيل

tblRows[i].style.display = (rowVisible) ? "none" : "table-row";

أو

tblRows[i].style.display = (rowVisible) ? "none" : "auto";

قد ترغب في وضع onclick الكلمة الفعلية <tr> الوسم بدلا من الفردية <th> العلامات.بهذه الطريقة يكون لديك أقل شبيبة في HTML الخاص بك والتي سوف تجعل الأمر أكثر للصيانة.

إذا تم تمكين تصحيح البرامج النصية في أي (أدوات->خيارات إنترنت->خيارات متقدمة) و يضع المصحح;' البيان في المدونة ، أي سوف تجلب تلقائيا Visual Studio عندما يضرب المصحح البيان.

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

<table>
  <tr style="display:none"> ... </tr>
  <tr style="display:"> ... </tr>
</table>

ثم يمكنني استخدام جافا سكريبت لتغيير نمط الطريقة التي كنت تفعل ذلك.

أنا دائما استخدام الاسلوب.display = "block" و الاسلوب.display = "none"

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