【问题标题】:How to delete data from String in javascript如何在javascript中从字符串中删除数据
【发布时间】:2016-03-29 23:10:47
【问题描述】:

我有一个数据表,其中每一行都有复选框。在我的数据表之外有一个打印按钮,用于打印所选行的数据。我将用户选择的所有行 ID 数据存储在字符串中。现在,当用户取消选中该复选框时,我想从该字符串对象中删除行 ID 数据。每当用户取消选中该复选框时,它都不会从我之前保存的字符串中删除数据。要在此处指定,我只能将字符串对象发送到控制器。 我不确定如何实现这一目标。

下面是我的代码。

 For print,here is the function
$("img#print").live("click",function(){

var checkboxes = document.getElementsByName('CheckBoxTest');
var mnFlag = false;
var row;
checkedbills = "";  
for (var i=0; i<checkboxes.length; i++)
{

     if (checkboxes[i].checked)
     {
        row = checkboxes[i].id;
        row = row.substring(row.search("_") + 1,row.length);
        sData = $("#openItems").dataTable().fnGetData(row);

        if(sData.SrcTypCode == "Y8")
        {
            mnFlag= true;
            checkedbills = invoiceArray;
                }
     }
}
if(mnFlag)
{
        $('#reBill-dialog').dialog({
            autoOpen: true,
            height: 600,
            width: 650,
            modal: true,
            dialogClass: "foo1",
            closeOnEscape: false,
            draggable: true,
            canMinimize: true,
            beforeClose: cancelReBill()
        });
        }
    else
     {
         if(billData.length < 1)
         {
        alert("Please select at least one bill to be printed");
    }
         else
         {
    $.ajax({
        dataType: "json",
        type: "POST",
        url: 'data_print',
        data: {billData:billData}, 
        success: function(dataList){
            var printDet = dataList.PrintDetails;
            if(printDet == "N"){
                alert(dataList.PrintMessage);
            }
            else{
                alert(dataList.PrintMessage);
            }

        },
        error: function(xhr, ajaxOptions, thrownError) {
         }
    });
}
     }
});

下面是我在选中复选框时将数据存储在字符串中的代码。

                                                                  $('#bills tbody tr   input[name="CheckBoxTest"]').live('change',function(e){
var row=$(this).closest("tr").get(0);
var invsysNumber = $('#bills').dataTable().fnGetData(row).invSysNumber;
var invverNumber = $('#bills').dataTable().fnGetData(row).invVerNumber;
var data = $('#bills').dataTable().fnGetData(row).invSysNumber+','+$('#bills').dataTable().fnGetData(row).invVerNumber;
var index ;
 if(data in checkboxAccIndicator )
    {
    index=1;
    }
else
    {
    index=-1;
    }

if($(this).is(':checked') && (index == -1))
{

    checkboxAccIndicator[$('#bills').dataTable().fnGetData(row).invSysNumber+
                     ","+$('#bills').dataTable().fnGetData(row).invVerNumber]=
    $('#bills').dataTable().fnGetData(row).arLocation;

    if(invoiceArray == ""){
        invoiceArray = "~" + invsysNumber + "," + invverNumber ;
    }else {
        invoiceArray = invoiceArray + "~" + invsysNumber + "," + invverNumber ;
    }


// Otherwise, if checkbox is not checked and row ID is in list of selected row IDs
} 
else if (!($(this).is(':checked')) && (index != -1))
{
   delete checkboxAccIndicator[$('#bills').dataTable().fnGetData(row).invSysNumber+
                         ","+$('#bills').dataTable().fnGetData(row).invVerNumber];

       }

  });

【问题讨论】:

    标签: javascript jquery string datatables


    【解决方案1】:

    我建议您将复选框 ID 列表作为数组管理,然后在将其传递给控制器​​时将其序列化为字符串。这种方法要简单得多:

    // Initialize array
    var invoiceArray = [];
    
    // Add item to array
    invoiceArray.push(invsysNumber + "," + invverNumber);
    
    // Remove specified item from array
    var itemToRemove = invsysNumber + "," + invverNumber;
    for (var i=0, il=invoiceArray.length; i<il; i++) {
        if (invoiceArray[i] === itemToRemove) {
            invoiceArray.splice(i, 1);
            break;
        }
    }
    
    // Convert array to a string for your controller
    var invoiceArrayString = invoiceArray.join('~');
    

    或者,如果您保留当前解决方案,其中“invoiceArray”实际上是一个字符串(命名不佳),则无论如何都必须将其转换为数组才能删除项目。

    // Remove item from "invoiceArray" string
    var invoiceArraySplit = invoiceArray.split('~');
    var itemToRemove = invsysNumber + "," + invverNumber;
    for (var i=0, il=invoiceArraySplit.length; i<il; i++) {
        if (invoiceArraySplit[i] === itemToRemove) {
            invoiceArraySplit.splice(i, 1);
            break;
        }
    }
    // Convert back to string
    var invoiceArray = invoiceArraySplit.join('~');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      • 2018-03-08
      • 2016-01-01
      • 1970-01-01
      相关资源
      最近更新 更多