0

jquery を使用して、特定のテーブル (「grid1」など) のチェックボックスの変更を検出しようとしています。

(FWIW - テーブルは jqgrid です)

しかし、私が使用している「セレクター」ステートメントが期待どおりに機能していないようです。

特定のテーブル (つまり、"grid1") 内のチェックボックスの変更を検出する代わりに、"grid2" を含むドキュメント全体の変更も検出/対応しています。

私は明らかにセレクターで何か間違ったことをしています。――何だかさっぱりわかりません。

これについて助けてくれてありがとう:-)

参考までに-jqueryの「セレクター」コードは次のようになります...

        $("#grid1 :checkbox")
        {
            $(this).change( function(e)
            {
                var t = $(e.target);   
                var row = t.closest("tbody").children().index(t.closest("tr"));
                var rowids = $('#grid1').jqGrid('getDataIDs');
                var rowid = rowids[row-1];
                var rowdata = $("#grid1").getRowData(rowid);
                $("#grid1").jqGrid('setRowData', rowid, rowdata); 
                $("#grid1").setSelection(rowid);                        
            });
        };  

...そして、このような HTML 構造...

        <body>
            <form id="form1">
                <div>
                    <div>                    
                        <input type="submit" id="submit"  value="Submit Grid Edits" />
                    </div>
                    <div id="div1">
                        <table id="grid1"></table>
                        <div id="pager1" ></div>
                    </div>
                    <div id="div2">
                        <table id="grid2"></table>
                        <div id="pager2" ></div>
                    </div>                
                </div>
            </form>
        </body>

CCTransitionsシーン専用です。a のすべての子に対してCCNodes呼び出されるため、幸いなことに、CCTransition コードをチェックして、それらがどのように実装されているかを確認してから、独自のレイヤーを展開することができます (多くの人がこれを実行して共有しています)。onEnterTransitionDidFinishCCNodeCCScene

たとえば、ブロックを使用してシーン トランジションと同じフェードイン、フェードアウト効果を与える単純な小さなメソッドを作成しましたが、個々のレイヤーに対して (いくつかの追加機能と共に)。隠したいレイヤー、フェードアウトとフェードインの速度、フェードする色、レイヤーが非表示になっている間に実行したいブロックを渡すだけです。

-(void)fadeLayer:(CCLayer*)layer withOutDuration:(float)outTime inDuration:(float)inTime color:(ccColor3B)color withBlock: (void(^)())block
{
    CGSize winSize = [[CCDirector sharedDirector] winSize];
    CCLayerColor *toplayer = [CCLayerColor layerWithColor:ccc4(color.r, color.g, color.b, 0) width:winSize.width height:winSize.height];

    [layer addChild:toplayer z:INT_MAX];

    [toplayer runAction:
      [CCSequence actions:
       [CCFadeIn actionWithDuration:outTime],
       [CCCallBlock actionWithBlock:block],
       [CCFadeOut actionWithDuration:inTime],
       [CCCallBlockN actionWithBlock:^(CCNode *node) {
          [node removeFromParentAndCleanup:YES];
       }],
      nil]
    ];
}
4

2 に答える 2

1

使用法ではなく要素に"change"イベントをバインドすることをお勧めします。主な違いは、チェックボックスの配列を表すことです。バインディングは、すべての要素に個別のイベント ハンドルを設定します。一方、イベントをバインドする場合は、イベント ハンドルを1 つだけ設定します。イベントのバブリングにより、子チェックボックスによって発生したイベント ハンドラー イベントをキャッチできます。すべてのハンドルを登録するために必要なメモリを少し節約できますが、コードは非常に単純です。近い問題について説明している古い回答を参照してください。<table>$("#grid1 :checkbox").on("change", ...);$("#grid1 :checkbox")change<table>"change"

デモでは、アプローチを示します。イベントハンドルはそう見える

$("#grid1").change(function (e) {
    var $td = $(e.target).closest("td"),     // the cell
        $tr = $td.closest("tr.jqgrow"),      // the row
        rowid = $tr.attr("id"),
        iCol = $.jgrid.getCellIndex($td[0]), // column index
        colModel = $(this).jqGrid("getGridParam", "colModel");

    // verify that event fired in the column "closed"
    if (iCol >= 0 && colModel[iCol].name === "closed" &&
            e.target.nodeName.toUpperCase() === "INPUT") {
        alert("Chechbox in rowid=" + rowid + " clicked. It's " +
            ($(e.target).is(":checked") ? "checked" : "unchecked") + " now");
    }
});

次のような結果が表示されます

ここに画像の説明を入力

于 2013-05-24T16:58:30.253 に答える