0

用户必须单击列中的服务。函数中的代码太大且专有,无法修改,代码工作正常,这是重要的部分。

    this.addDeliveredServicePressed = function() {        
        //big code ...............................
        //Important bit ORIGINAL

        var rowCallback = function(nRow, aData, iDisplayIndex) {
          /* Set onclick action */
          nRow.onclick = deliveredServiceClicked;
          return nRow;
          //Follow up code...
        }
    };

单击一行时,它会调用函数 DeliveredServiceClicked,该函数执行某些操作,然后返回它,后续代码构建表。

我在带有 Jquery 插件的 rowCallback 函数中使用了 Jquery 函数,问题是老板希望“框”“完全”匹配网页上其他框的 css 样式。所以我所做的是在 nRow.onclick 上创建某种“桥”,使用 YES/NO 选项调用 HTML DIV(我这样做是为了使用已经创建的 CSS 类),No 选项是一个关闭函数, YES 函数,应该运行一个更改全局变量的函数,以便它验证并运行 nRow.onclick=deliveredServiceClicked;

这是我更改后的主要功能。

   this.addDeliveredServicePressed = function() { 
      var rowCallback = function(nRow, aData, iDisplayIndex) {
         /* Set onclick action */
         if (confirmedglobal==1){
            alert("serviceclicked");
            nRow.onclick = deliveredServiceClicked;
            confirmedglobal=0;
           //This confirmedglobal=0, puts the global back to 0 so after the first YES it resets it back to 0, so it keeps asking.
            return nRow;
         }else if (confirmedglobal==0){
            //This is the redirect to the HTML dialogue, using some util
            nRow.onclick = ConfirmService;
         }
      };

这是我的 YES onclick 功能

   this.Confirmed = function (){
      confirmedglobal = 1;
      addDeliveredServicePressed();
       //diag box close util to be added, not now
   }

因此,要恢复此功能,在我的计划中,应该将全局设置为 1,然后从一开始就执行函数 addDeliveredServicePressed,这是主要功能,因此它会更新我想要的标记。它现在正在做的是将全局设置为 1,但它不会 addDeliver .... 所以它改变了全局,但没有任何反应,当我关闭并再次打开时,它不再要求 YES NO,但它添加并完美地构建桌子。

所以我的问题是,为什么 addDeliveredServicePressed(); 在我的 Confirmed 函数未执行时,您会使用什么其他方法??我考虑了很多选项,我提出了全局变量和 if 作为更好的解决方案,即使全局变量不是最佳选择。

无论如何,我是 js 中的菜鸟。所以它不像我可能没有错过任何东西

跟进问题

在同一个js上只有这个更多

   deliveredServicesTable = $('#deliveredServices').dataTable( {
        "bDestroy": true,
        "oLanguage": {
            "sEmptyTable": translate.msg("info.no.delivered.services"),
            "sInfo": "",
            "sInfoEmpty": "",
            "sZeroRecords": ""
        },
        "bFilter": false,
        "fnRowCallback": rowCallback,
        "fnHeaderCallback": headerCallback,
        "bLengthChange": false,
        "bProcessing": true,
        "bPaginate": false,
        "aoColumns": columns,
        "sScrollX": "95%",
        "sScrollY": "158px",
        "aaData": (sessvars.state.visit != null &&
            sessvars.state.visit.currentVisitService != null &&
            sessvars.state.visit.currentVisitService.visitDeliveredServices !== null ?
            sessvars.state.visit.currentVisitService.visitDeliveredServices : null)
    });
    $(window).bind('resize', function () {
        deliveredServicesTable.fnAdjustColumnSizing();
    } );
}

在一个名为“jquery.datatables.js”的文件上,有一个 jquery 插件,用于某些功能,但我认为我不需要任何东西,它就像一个 35k 行代码,并且有多个功能

/**
 * This function allows you to 'post process' each row after it have been
 * generated for each table draw, but before it is rendered on screen. This
 * function might be used for setting the row class name etc.
 *  @type function
 *  @param {node} nRow "TR" element for the current row
 *  @param {array} aData Raw data array for this row
 *  @param {int} iDisplayIndex The display index for the current table draw
 *  @param {int} iDisplayIndexFull The index of the data in the full list of
 *    rows (after filtering)
 *  @dtopt Callbacks
 *
 *  @example
 *    $(document).ready(function() {
 *      $('#example').dataTable( {
 *        "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
 *          // Bold the grade for all 'A' grade browsers
 *          if ( aData[4] == "A" )
 *          {
 *            $('td:eq(4)', nRow).html( '<b>A</b>' );
 *          }
 *        }
 *      } );
 *    } );
 */
"fnRowCallback": null,
4

0 回答 0