1

我正在尝试使数据表在单击时展开以显示更多信息。问题是我正在通过大约 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
    }   
}

基本上,此函数将文件路径和网址保存到全局变量以供以后使用,然后调用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,然后找到其所在的行,然后调用一个打开或关闭可扩展数据的函数......这是通过 fnOpenfnClose使用fnFormatDetails来填充可扩展行来完成的......

这一切都很好,花花公子,一切都被正确传递并加载很好,但唯一的问题是它需要两次点击来打开和关闭可扩展行......一次是图像上的链接,然后是另一个调用 jQuery 函数。我需要一种方法来解决这个问题,只需单击一下,同时仍然为每个单独的条目加载数据......我在想最好的方法是找到一种方法来调用 jQuery 函数而.live('click', function()无需需要第二次点击。

有什么建议么?

4

3 回答 3

1

更新您的功能如下

storeInfo() 的声明:

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

调用链接:

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

内部对 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,我不明白为什么您需要在 controlButton 中进行实时绑定。如果只是为了获取 nTr,则可以将其作为参数从 storeInfo 传递给 controlButton。

于 2012-10-25T16:02:15.387 回答
0

我不知道我是否理解你的问题,但你能简单地在你的storeInfo函数结束时调用controlButton函数吗?

于 2012-10-25T15:49:03.490 回答