You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在锚标签内的JavaScript函数调用中正确传递参数?

问题分析与解决方案

你的语法错误出在拼接chatuser()函数参数时没有给字符串值加引号。举个例子:如果data[j].user的值是"amit",你当前的代码拼出来的HTML会是:

<a href='javascript:chatuser(amit)'>'amit'</a>

这里amit没有被引号包裹,浏览器会把它当作一个变量而非字符串,自然会抛出语法错误。

修正方案1:正确拼接带引号的参数

你需要给参数添加引号,同时注意转义避免引号冲突,比如用双引号包裹参数并转义:

$online.append("<a href='javascript:chatuser(\""+data[j].user+"\")'>"+data[j].user+"</a>");

或者用单引号包裹并转义:

$online.append('<a href="javascript:chatuser(\''+data[j].user+'\')">'+data[j].user+'</a>');

这样拼出来的HTML会是正确的:

<a href='javascript:chatuser("amit")'>amit</a>

更推荐的方案2:用jQuery创建元素(避免XSS和语法问题)

直接拼接HTML字符串很容易因为用户输入的特殊字符(比如"、'、<)引发新问题,甚至存在XSS风险。更安全的做法是用jQuery的API动态创建元素并绑定点击事件:

// 创建a标签
var userLink = $('<a>', {
    text: data[j].user,
    href: 'javascript:void(0)' // 或者直接不设置href,用点击事件触发
});
// 绑定点击事件,传递参数
userLink.click(function() {
    chatuser(data[j].user);
});
// 添加到目标元素
$online.append(userLink);

这种方式不仅彻底避免了语法错误,还能防止恶意用户输入特殊字符破坏页面或发起攻击,代码可读性也更强。

另外提一句:你的data = JSON.parse(JSON.stringify(val));其实有点多余,如果UserList.jsp返回的是JSON格式,直接在AJAX里设置dataType: 'json',success回调里的val就已经是解析好的对象了,不用再手动解析。比如:

$.ajax({ 
    url: 'UserList.jsp', 
    dataType: 'json', // 自动解析返回的JSON数据
    success: function(data){ // 这里data已经是解析后的对象
        var len = Object.keys(data).length; 
        for(var j=0; j<len; j++){
            if(data[j].user){ 
                // 用上面推荐的方式创建链接
                var userLink = $('<a>', {text: data[j].user, href: 'javascript:void(0)'});
                userLink.click(function() {
                    chatuser(data[j].user);
                });
                $online.append(userLink);
            } 
        } 
    }, 
    error:function(val){
        alert('fail'); 
    } 
});

内容的提问来源于stack exchange,提问作者AMIT KUMAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:07:15