javascript - 如何在javascript中删除字符串中的数据

标签 javascript jquery string datatables

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

下面是我的代码。

 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];

       }

  });

最佳答案

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

// 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('~');

关于javascript - 如何在javascript中删除字符串中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34436988/

相关文章:

javascript - 使内容可编辑部分中的 h2 标签不可删除

javascript - 动态更改交替行颜色

javascript - 无法理解 meteor 中的 MUP 错误

javascript - jQuery 替换变量在更改时不会被替换

javascript - window.location.href 不起作用,它总是返回警报

javascript - 父窗口中的 jquery 表达式无法在弹出窗口中正常工作 - 出了什么问题?

java - 嵌套 switch case 和字符串到 char 的错误

python-3.x - 如何使用 CalDAV 删除事件

java - Android If 语句失败

javascript - python 交互式网络数据/表单/接口(interface)与远程服务器通信