首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript在href onclick请求中传递变量

Javascript在href onclick请求中传递变量
EN

Stack Overflow用户
提问于 2011-10-21 21:27:04
回答 3查看 38.6K关注 0票数 6

我知道这是非常基本的javascript,但是由于某些原因,在传递参数时,我似乎不能让我的链接的onclick函数工作。

我尝试转义引号,添加不同类型的引号,并将原始变量作为字符串添加。

我有它与下面的工作,但它说"XYZ是未定义的“

代码语言:javascript
运行
复制
function renderLink(value, meta, record)
        {
            var type = record.data['name']; //value is XYZ  


            return '<a href="javascript:void(0);" onclick="getReport('+type+'); return false;"></a>';
        }

function getReport(type){

    alert(type);
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-21 21:29:56

代码语言:javascript
运行
复制
return '<a href="javascript:void(0);" onclick="getReport('+type+'); return false;"></a>';

您需要对字符串进行转义:

代码语言:javascript
运行
复制
return '<a href="javascript:void(0);" onclick="getReport(\''+type+'\'); return false;"></a>';
票数 10
EN

Stack Overflow用户

发布于 2011-10-21 21:29:50

如果您查看呈现的超文本标记语言,您将看到问题:您的getReport调用如下所示:

代码语言:javascript
运行
复制
getReport(XYZ);

我猜你想要引用它,所以:

代码语言:javascript
运行
复制
return '<a href="javascript:void(0);" onclick="getReport(\''+type+'\'); return false;"></a>';

...which渲染:

代码语言:javascript
运行
复制
getReport('XYZ');

Live example

更深奥一些,但是当您将onclick属性作为HTML源的一部分输出时,它当然是一个HTML属性,这意味着您可以使用字符实体。因此您可以使用&quot;实体:

代码语言:javascript
运行
复制
return '<a href="javascript:void(0);" onclick="getReport(&quot;'+type+'&quot;); return false;"></a>';

Live example

我指出这一点并不是因为我推荐它(我不推荐),而是因为它有助于记住onclick属性中到底发生了什么。这是我强烈建议使用适当的事件处理程序(例如,通过addEventListener / attachEvent,甚至在实例化a元素的onclick属性后将其赋值)的原因之一。

需要注意的是,这种方式对record.data['name']的内容也非常敏感。例如,考虑一下如果使用Tom's而不是XYZ会发生什么。上面第一个选项的输出为

代码语言:javascript
运行
复制
getReport('Tom's');

...which显然是个问题。类似地,如果文本中有反斜杠,它将被视为结果中的转义字符,依此类推-有点雷区。

如果您可以更改您的renderLink,使其返回一个实际实例化的a元素,而不是字符串,这就是我要做的:

代码语言:javascript
运行
复制
function createLink(value, meta, record)
{
    var type = record.data['name'];         // Grab value as of when we were called
    var link = document.createElement('a');

    link.href = "javascript:void(0);";
    link.onclick = function() {             // Or even better, addEventListener / attachEvent
        getReport(type);
        return false;
    };

    return link;
}

这将创建一个链接和一个闭包,它可以访问type,而不会将其转换为文本并返回。(如果您不熟悉闭包,也不用担心,closures are not complicated。)

Live example

票数 2
EN

Stack Overflow用户

发布于 2011-10-21 21:30:42

getReport接收XYZ作为变量,而不是字符串,您需要将其放在引号中:

代码语言:javascript
运行
复制
return '<a href="javascript:void(0);" onclick="getReport(\''+type+'\'); return false;"></a>';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7850066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档