首先场景是在一个按钮上拼接参数的onclick事件,由于需要拼接的参数内容中含有空格(或者百分号等特殊字符),此时js会报错,无法进行传参。报错的写法如下:
{
render : function(data, type, row, meta) {
var str ='<button type="button" class="btn btn-info btn-xs" data-toggle="modal" data-target="#gradingmodal" onclick=opengrading('
+ JSON.stringify(row.userName)
+','
+ JSON.stringify(row.createTime)
+','
+ JSON.stringify(row.realdeduct)
+','
+ JSON.stringify(row.realgrade)
+','
+ JSON.stringify(row.evaluation)
+ ') ><i class="fa fa-edit"></i>打分</button></td>'
return str;
}
或者
render: function (data, type, row, meta) {
return '<button type="button" class="btn btn-info" data-toggle="modal" data-target="#su-modal-edit" onclick=suModalEdit(' +
JSON.stringify(row) +
')><i class="fa fa-edit"></i> 编 辑</button>'
}
这两种写法一个是获取本行部分数据,一个是或者整行所有数据,在本行数据或者选择的数据无空格时,都可以正常执行,并且数据为null时填充到新的input中不会显示。
当含有空格时,这两种写法都会报错,解决方法是改为如下写法:
render : function(data, type, row, meta) {
console.log(JSON.stringify(row.realdeduct));
var str ="<button type='button' class='btn btn-info btn-xs' data-toggle='modal' data-target='#gradingmodal'"+
"onclick=\"opengrading('"+row.userName+"','"+row.createTime+"','"+row.realdeduct+"','"+row.realgrade+"','"+row.evaluation+"')\">"+
"<i class='fa fa-edit'></i>打分</button></td>"
return str;
}
通过转义字符"可以解决空格报错的问题,但是此时要注意进入到opengrading函数中某个参数为null时会填充为字符串"null",并且上面用的是row.userName而不是row、JSON.stringify(row.userName)、JSON.stringify(row),用后面两个还是会出现空格的错误,也不能直接用row,用row的话在opengrading()中无法读取row.userName,使用row.userName和转义字符是可行的办法,然后只要在函数中if(row.userName==“null”)处理一下就好了。
网上说的用escape函数在我这边还是提示出错,查看错误部分是因为%,不可行。
此页面是使用bootstrap datatables等技术,之前使用easyui时都是勾选然后获取$(’#user’).datagrid(‘getSelections’),没有碰到过问题,不知道js参数有空格会报错的问题,刚开始还以为JSON.stringify()不能转化空格,后来仔细分析才发现是js的参数不能有空格,如果不使用"转义字符不能解决空格的问题。还可以使用 去除字符串内所有的空格:str = str.replace(/\s*/g,""); 这种方法,但是这样删除空格会导致数据不准确(比如时间字符串会变得可读性低),最好还是多写一点保证准确性。
参考链接:https://blog.csdn.net/zhuifengshaonian201/article/details/88579107