验证框,有点难

时间:2013-06-25 15:53:15

标签: javascript jquery

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

    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...
        }
    };

当点击一行时,它调用一个函数deliverServiceClicked,它执行某些操作,然后返回它,后续代码构建表。

我在rowCallback函数中使用了一个带有Jquery插件的Jquery函数,问题是boss希望“box”“完全”匹配网页上其他框的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 ....所以它改变全局,但没有任何反应,当我关闭并再次打开它没有longers要求YES NO,但它添加并且完美地构建了表格。

所以我的问题是这个,为什么addDeliveredServicePressed();在我的Confirmed函数没有被执行的情况下,你会使用什么其他方法?,我想到了很多选项,我带来了全局变量和if作为更好的解决方案,即使全局变量也不是最好的选择。 / p>

无论如何我是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行代码,并且有多个函数< / p>

/**
 * 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,

0 个答案:

没有答案