سؤال

إليك سريعة ونحيف من قضية بلدي:

$("a").toggle(function() { /*function A*/ }, function() { /*function B*/ });

وداخل function A يتم عرض النموذج. إذا كان المستخدم اكتمال النموذج بنجاح، يتم إخفاء النموذج مرة أخرى (العودة الى انها حالته الأصلية).

وداخل function B نفس شكل مخفي.

والنظرية وراء ذلك هو أن يمكن للمستخدم اختيار لعرض النموذج وتعبئته، أو أنها يمكن النقر مرة أخرى، ويكون على شكل يعود إلى الاختباء.

والآن سؤالي هو: في الوقت الراهن، إذا كان المستخدم بتعبئة النموذج بنجاح - ويذهب الى الاختباء - المستخدم سيكون الضغط على الرابط مرتين قبل العودة إلى حالة تبديل أن يعرض النموذج.

وهناك على أية حال لإعادة برمجيا التبديل تبديل إلى حالته الأولية؟

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

المحلول

ومسج لديها طريقتين .toggle():

.toggle()

<اقتباس فقرة>   

وتبدل كل مجموعة مطابقة   عناصر. إذا يتم عرضها، والتبديل   يجعلها خفية. إذا كانت مخفية،   تبديل يجعلها مبين.

.toggle(even, odd)

<اقتباس فقرة>   

وتبديل بين وظيفة يدعو كل نقرة أخرى.

في هذه الحالة تريد أول واحد. شيء من هذا القبيل يجب أن تفعل خدعة:

$("a").click(function() {
    $("#theForm").toggle();
});

نصائح أخرى

ويمكنك التحقق من حالة تبديل في مسج باستخدام .is(":hidden"). حتى في التعليمات البرمجية الأساسية ما كنت:

$("#div_clicked").click(function() {
  if ($("#toggle_div").is(":hidden")) {
     // do this
  } else {
     // do that
}
}); # add missing closing

وإليك ما كنت:

$(document).ready(function() {
    $('#listing_position').click(function() {

    var div_form = $('#listing_position_input');
        if (div_form.hasClass('hide')) {
           div_form.removeClass('hide');
        } else {
          div_form.addClass('hide');
        }
    });  
});

والخبر، فإنه من الأمور البسيطة في الحياة ...

وكنت باستخدام التعريف الأخير من toggle(even,odd);، ولكن كنت قد نسيت أن تدرج في بلدي الأصلي وصف المشكلة التي بلدي الثاني وظيفة تبديل وليس فقط يختبئ النموذج ولكن تدميره أيضا.

وfunction A: اياكس تحميل النموذج إلى شعبة إلحاق. إخفاء وتدمير شعبة على نجاح وظيفة النموذج.

وfunction B: تدمير شعبة

وكلاكما ذكرني أن toggle(); يتعامل فقط مع الخاصية CSS، وعلى هذا النحو ليست مناسبة تماما لهذه المهمة. ولكن بعد ذلك أدركت أنني لا داعي له بإعادة تحميل النموذج على كل دولة "غريبة" عن طريق تدمير عندما كنت فعلت، لذلك أنا في نهاية المطاف عاد إلى هذا:

$("link").click(function() {
    if ($(this).siblings(".form-div").length == 0) {
        // form is not loaded; load and show the form; hide when done
    }
    else {
        $(this).siblings(".form-div").toggle();
    }
});

... الذي يفعل ما أريد القيام به. شكرا لوضع لي مباشرة عن toggle();!

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

$("#clickie").click(function(){
  if ( $("#mydiv").css("display") == "none" ){
     $("#mydiv").show();
       } else {
        $("#mydiv").hide();
}
$("#div_clicked").click(function() {
  if ($("#toggle_div").is(":visible")) {
     // do this
  } else {
     // do that
}

واستبدال الخفية مع مرئية

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