Domanda

ho creato un oggetto JavaScript per tenere su un valore impostato da un utente il controllo di una checbox in un ColorBox .

Sono relativamente nuovo per jQuery e programmazione JavaScript "nel modo giusto", e volevo essere sicuro che il meccanismo di seguito per catturare gli utenti azione di controllo è stata una best practice per JavaScript in generale. Inoltre, dal momento che sto impiegando jQuery c'è un metodo più semplice per tenere sulla loro azione che dovrei essere utilizzando?

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();
            });
        }
    });
});
È stato utile?

Soluzione

Personalmente, vorrei collegare il valore (s) a un oggetto direttamente utilizzando il metodo data() built-in di jQuery. In realtà non sono del tutto sicuro di quello che si sta cercando di fare, ma, si può, ad esempio, allegare i valori ad un "namespace" nel DOM per un uso successivo uno.

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

Poi si dovrebbe recuperare il valore più tardi da:

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

Si esegue il metodo data() su qualsiasi oggetto jQuery. Direi che questo è best-practice per quanto jQuery va.

Altri suggerimenti

Si potrebbe cogliere il riferimento a una chiusura, che evita i dati globali e rende più facile per avere più controlli. Tuttavia, in questo caso sembra essere vincolante per il singolo colorbox, quindi non so che utilmente si potrebbe avere più istanze.

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()) è ridondante. $.fn.colorbox.element() è già un elemento jquery.

  • E 'uso comune (negli esempi ho visto, almeno) da anteporre un $ alle variabili che fanno riferimento gli elementi jQuery.
    Così, var $rows = $.fn.colorbox.element().parents('tr'); dà immediatamente l'idea che si fa riferimento elemento jQuery (s).

  • Sono fadeOut paura non funziona su file in IE6 (se ricordo bene). Si dovrebbe essere in grado di nascondere tutti i contenuti all'interno del <tr> prima di rimuoverla.

Non può fare sulla cosa "semplificare", perché non so migliori usi del colorbox.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top