JS中拼接dom元素时,处理其事件传参(字符串参数)问题

一、问题和原因

我们在做前后端数据交互时,往往需要在前端js写入动态的dom对象,例如下面代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../../../scripts/common/jquery-1.8.2.min.js" type="text/javascript"></script>
	</head>
	<body>
		<div id="main_dom"></div>
	</body>
	
	<script>
	   $(function(){
		   var testNum = "javascript";
		   
		   var html = '<a οnclick="Test(' + testNum +')">'
		   + '测试传参</a>';
		   
		   $('#main_dom').append(html);
	   })
	   
	   function Test(num){
		   console.log(num)
	   }
	</script>
</html>

这里我们可以发现其中dom对象带有一个点击事件并传递了一个叫"javascript"的参数,此时我们触发点击事件打印一下这个参数会发现:
在这里插入图片描述
这是因为浏览器将"javascript"这个参数解析成了一个变量,而不是直接传递这个字符串,所以报错未定义。

二、解决方法

方法一:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../../../scripts/common/jquery-1.8.2.min.js" type="text/javascript"></script>
	</head>
	<body>
		<div id="main_dom"></div>
	</body>
	
	<script>
	   $(function(){
		   var testNum = "javascript";
		   
		   var html = '<a οnclick="Test(\'' + testNum +'\')">'
		   + '测试传参</a>';
		   
		   $('#main_dom').append(html);
	   })
	   
	   function Test(num){
		   console.log(num)
	   }
	</script>
</html>

使用转义符 \ ,给变量添加引号,将变量转化为字符串。

在这里插入图片描述
方法二:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../../../scripts/common/jquery-1.8.2.min.js" type="text/javascript"></script>
	</head>
	<body>
		<div id="main_dom"></div>
	</body>
	
	<script>
	   $(function(){
		   var testNum = "javascript";
		   
		   //注意:此行代码使用返单引号
		   var html = `<a οnclick="Test('${testNum}')">`
		   + '测试传参</a>';
		   
		   $('#main_dom').append(html);
	   })
	   
	   function Test(num){
		   console.log(num)
	   }
	</script>
</html>

使用es6新增的字符串语法${},配合反单引号拼接起来

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值