سؤال

لقد قمت بإنشاء كائن JavaScript لعقد قيمة محددة بواسطة مستخدم يقوم بفحص Checbox في علبة الالوان.

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

function Check() {
    this.Checked = false;
}

obj = new Check;

$(document).ready(function() {
    $('.cboxelement').colorbox({ html: '<input id="inactivate" type="checkbox" name="inactivatemachine">&nbsp;<label for="inactivate">Inactivate Machine</label>' });

    $(document).bind('cbox_cleanup', function() {
        obj.Checked = $.fn.colorbox.getContent().children('#inactivate').is(':checked');
    });

    $(document).bind('cbox_closed', function() {
        if ($($.fn.colorbox.element()).attr('id').match('Remove') && obj.Checked) {
            var row = $($.fn.colorbox.element()).parents('tr');
            row.fadeOut(1000, function() {
                row.remove();
            });
        }
    });
});
هل كانت مفيدة؟

المحلول

شخصيا، أود أن أرفق القيمة (القيم) إلى كائن يستخدم مباشرة في jQuery's المدمج data() طريقة. أنا لست متأكدا تماما ما تحاول القيام به ولكن، يمكنك، على سبيل المثال، إرفاق القيم إلى "مساحة الاسم" في DOM لاستخدامها لاحقا.

$('body').data('colorbox.checked',true);

ثم يمكنك استرداد القيمة لاحقا عن طريق:

var isChecked = $('body').data('colorbox.checked');

أنت تعمل data() طريقة على أي كائن مسج. أود أن أقول أن هذه هي أفضل ممارسة بقدر ما يذهب jQuery.

نصائح أخرى

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

function Check() {
    this.Checked = false;

    var obj = this; // 'this' doesn't get preserved in closures

    $(document).ready(function() {
       ... as before
    )};
}

var check = new Check; // Still need to store a reference somewhere.
  • $($.fn.colorbox.element()) هو زائد. $.fn.colorbox.element() هو بالفعل عنصر jQuery.

  • إنه استخدام شائع (في الأمثلة التي شاهدتها، على الأقل) لإعداد $ للمتغيرات التي تشير إلى عناصر مسج.
    وبالتالي، var $rows = $.fn.colorbox.element().parents('tr'); يعطي الفكرة على الفور أنه يشير إلى عنصر (جيوص).

  • أنا خائف fadeOut لن تعمل على صفوف في IE6 (إذا كنت أتذكر بشكل صحيح). يجب أن تكون قادرا على إخفاء كل المحتوى داخل <tr> قبل إزالة ذلك.

لا يمكن أن تساعد في "تبسيط" الشيء لأنني لا أعرف أفضل استخدامات Colorbox.

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