سؤال

ببساطة جدا: الخط currentItem.toggleClass('open'); لا يبدو أنه يعمل.

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

هل يمكن لأي شخص أن يشرح لي لماذا هذا وكيف يمنعه؟

ها هو رمز jQuery الخاص بي:

$('div.collapse ul.radio_list li input[type=radio]').click(function (event) {

    var currentTree = $(this).parent().parent().parent();
    var currentItem = $(this).parent().parent();
    var currentGroup = currentItem.attr('rel');

    $(this).parents('ul').children('li').removeClass('select');
    if ($(this).is(':checked')) {
        currentItem.addClass('select');
    }

    currentItem.toggleClass('open');

    var currentLevel = 0;
    if (currentItem.is('.level1')) {currentLevel = 1;}
    if (currentItem.is('.level2')) {currentLevel = 2;}
    if (currentItem.is('.level3')) {currentLevel = 3;}
    var nextLevel = currentLevel + 1;

    currentTree.children('li').filter('li[rel ^=' + currentGroup + '].level' + nextLevel).animate({'height': 'show', 'opacity': 'show'}, 250).addClass('currentChild');
});

وهنا جزء من رمز HTML الخاص بي ، مبسط قليلاً عن قابلية قراءة أفضل (ليست جميلة جدًا أعرفها ، لكن لدي فقط تحكم محدود في إخراج HTML):

<div class="col_left collapse">
    <ul class="radio_list" rel="7">
        <li class="onglet level0" rel="group1">
            <span class="onglet level0">
                <input type="radio" />
                    <label>Services Pratiques</label></span>
            <input type="hidden" value="1">
        </li>

شكرا مقدما.

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

المحلول

تم حل المشكلة: تم تضمين ملف JS بالفعل مرتين في رأس HTML ، مما تسبب في تشغيل الوظيفة مرتين مع كل نقرة.

نصائح أخرى

لقد واجهت مشكلة مماثلة على موقعي ، ووجدت أنني قد قمت بتكرار خطاف Toggleclass بطريق الخطأ على طول الطريق في الأسفل ، عندما أتعامل معها أولاً. أُووبس! تأكد من البحث عن مكالمات مزدوجة!

واجهت مشكلة مماثلة في القيام بذلك:

لغة البرمجة:

<a>JS-link</a>

JS:

$('a').click(function(event) {
    ... my stuff ...
    # Forgot to do event.preventDefault(); !!
}

النتائج في النقرات يجري التسجيل مرتين!

واجهت نفس المشكلة وأدركت أنني ربطت الوظيفة بطريق الخطأ مرتين. كنت أقصد في الأصل نقل الكود من ملف JavaScript إلى آخر ، لكنني تركت الأصل بطريق الخطأ في مكانه.

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