js函数的参数JSON.stringify(row)中含有空格时出错的解决办法

首先场景是在一个按钮上拼接参数的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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值