1

クリックしてdataTableを展開して、詳細情報を表示しようとしています。問題は、テーブルに約1000レコードを入力しているため、詳細データ(拡張されるデータ)を保持できる唯一の方法は、次のようなループプロセス中にリンクを介してデータを送信することです...

var imgCell = '<a href="javascript:storeInfo(&quot;'+theFilePath+'&quot;,&quot;'+theWebAddress+'&quot;,&quot;'+projectStatus+'&quot;);"><img src="https://cubistmediagroup.sharepoint.com/sites/canvas/PublishingImages/details_open.png"></a>';

これで、クリックするとこの関数を呼び出す画像リンクが作成されます...

function storeInfo (filePath, webAddress, projectStatus)
{
theFilePath = filePath;
theWebAddress = webAddress;

switch(projectStatus){
case "New Work - Waiting Activation":
    controlButton("NewWork", NewWorkTable);
break;
case "Active Projects":
    controlButton("ActiveProjects", ActiveProjectsTable);
break;
case "Waiting for Assets or Approvals":
    controlButton("WaitingAssets", WaitingAssetsTable);
break;
 //AND A WHOLE LOT MORE CASES
    }   
}

基本的に、この関数はファイルパスとWebアドレスをグローバル変数に保存して後で使用できるようにしてから、controlButton関数を呼び出します。

function controlButton (projectStatus, theTable){
$('#'+projectStatus+' tbody td img').live('click', function () {
     
    var nTr = this.parentNode.parentNode.parentNode;
    if ( this.src.match('details_close') )
        {
            // This row is already open - close it 
            this.src = "https://cubistmediagroup.sharepoint.com/sites/canvas/PublishingImages/details_open.png";
            theTable.fnClose( nTr );
        }
    else
        {
            // Open this row 
            this.src = "https://cubistmediagroup.sharepoint.com/sites/canvas/PublishingImages/details_close.png";
            theTable.fnOpen( nTr, fnFormatDetails(theTable, nTr), 'details' );
        }
     });
}

これは、htmlテーブルでimgを取得し、その行を見つけて、拡張可能なデータを開いたり閉じたりする関数を呼び出します...これは 、拡張可能な行にデータを入力するためにfnOpen使用fnCloseされます...fnFormatDetails

これはすべて正常に機能し、すべてが適切に渡されて読み込まれますが、唯一の問題は、展開可能な行を開閉するために2回クリックする必要があることです...画像上のリンクに対して1回、次にjQuery関数を呼び出すために別のクリックが必要です。これを回避する方法が必要で、個々のエントリのデータをロードしながらワンクリックで実行できます...最善の方法は、jQuery関数を呼び出さずに呼び出す方法を見つけることだ.live('click', function()と考えていました。 2回目のクリックの必要性。

助言がありますか?

4

3 に答える 3

1

次のように関数を更新します

storeInfo()の宣言:

function storeInfo (filePath, webAddress, projectStatus, elem)
{ //code }

リンクを呼び出す:

<a href="javascript:storeInfo("'+theFilePath+'","'+theWebAddress+'","'+projectStatus+'", this);"><img src="..."></a>

while内のcontrolButton()の呼び出し:

controlButton("ActiveProjects", ActiveProjectsTable, elem);

および更新されたcontrolButton()関数:

function controlButton (projectStatus, theTable, elem){
    img = elem.getElementsByTagName("img")[0]; //alternatively: $(elem).find('img');
    var nTr = elem.parentNode.parentNode;
    if ( img.src.match('details_close') )
    {
        // This row is already open - close it 
        img.src = "https://cubistmediagroup.sharepoint.com/sites/canvas/PublishingImages/details_open.png";
        theTable.fnClose( nTr );
    }
    else
    {
        // Open this row 
        img.src = "https://cubistmediagroup.sharepoint.com/sites/canvas/PublishingImages/details_close.png";
        theTable.fnOpen( nTr, fnFormatDetails(theTable, nTr), 'details' );
    }
}

テストできませんが、動作するはずです。

于 2012-10-25T15:52:42.057 に答える
0

問題を正しく理解しているかどうかはわかりませんが、関数の最後でstoreInfo関数を呼び出すことができますcontrolButtonか?

于 2012-10-25T15:49:03.490 に答える
0

あなたの質問を正しく理解したかどうかはわかりませんが、controlButtonがstoreInfo(クリックによってトリガーされる)からのみ呼び出される場合、controlButton内にライブバインディングが必要な理由がわかりません。nTrを取得するだけの場合は、それをパラメーターとしてstoreInfoからcontrolButtonに渡すことができます。

于 2012-10-25T16:02:15.387 に答える