1

ユーザーがColorBoxのチェックボックスをチェックすることによって設定された値を保持する JavaScript オブジェクトを作成しました。

私は jQuery と JavaScript の「正しい方法」のプログラミングに比較的慣れていないため、ユーザーチェック アクションをキャプチャするための以下のメカニズムが一般的な JavaScript のベスト プラクティスであることを確認したいと考えていました。さらに、私はjQueryを採用しているので、私が利用すべきアクションを保持するためのより簡単な方法はありますか?

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();
            });
        }
    });
});
4

3 に答える 3

2

data()個人的には、jQuery の組み込みメソッドを使用して値をオブジェクトに直接アタッチします。あなたが何をしようとしているのかは完全にはわかりませんが、たとえば、後で使用するために DOM の「名前空間」に値をアタッチすることができます。

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

次に、後で次の方法で値を取得します。

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

data()任意の jquery オブジェクトでメソッドを実行します。jQueryに関する限り、これはベストプラクティスだと思います。

于 2009-11-05T19:13:40.313 に答える
1

クロージャーで参照をキャプチャできます。これにより、グローバル データが回避され、複数のチェックが容易になります。ただし、この場合、単一のカラーボックスにバインドされているように見えるため、複数のインスタンスを有効に使用できるかどうかはわかりません。

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.
于 2009-11-05T19:04:36.290 に答える
0
  • $($.fn.colorbox.element())冗長です。$.fn.colorbox.element()はすでに jquery 要素です。

  • $jquery 要素を参照する変数の先頭に a を追加するのは、(少なくとも私が見た例では) 一般的な使用法です。
    そのため、var $rows = $.fn.colorbox.element().parents('tr');jquery 要素を参照しているという考えがすぐにわかります。

  • 残念fadeOutながら、IE6 の行では動作しません (正しく思い出せば)。<tr>削除する前に、内部のすべてのコンテンツを非表示にできるはずです。

カラーボックスの最適な用途がわからないため、「単純化」することはできません。

于 2009-11-05T18:39:20.337 に答える