我知道这是非常基本的javascript,但是由于某些原因,在传递参数时,我似乎不能让我的链接的onclick函数工作。
我尝试转义引号,添加不同类型的引号,并将原始变量作为字符串添加。
我有它与下面的工作,但它说"XYZ是未定义的“
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);
}发布于 2011-10-21 21:29:56
return '<a href="javascript:void(0);" onclick="getReport('+type+'); return false;"></a>';您需要对字符串进行转义:
return '<a href="javascript:void(0);" onclick="getReport(\''+type+'\'); return false;"></a>';发布于 2011-10-21 21:29:50
如果您查看呈现的超文本标记语言,您将看到问题:您的getReport调用如下所示:
getReport(XYZ);我猜你想要引用它,所以:
return '<a href="javascript:void(0);" onclick="getReport(\''+type+'\'); return false;"></a>';...which渲染:
getReport('XYZ');Live example
更深奥一些,但是当您将onclick属性作为HTML源的一部分输出时,它当然是一个HTML属性,这意味着您可以使用字符实体。因此您可以使用"实体:
return '<a href="javascript:void(0);" onclick="getReport("'+type+'"); return false;"></a>';Live example
我指出这一点并不是因为我推荐它(我不推荐),而是因为它有助于记住onclick属性中到底发生了什么。这是我强烈建议使用适当的事件处理程序(例如,通过addEventListener / attachEvent,甚至在实例化a元素的onclick属性后将其赋值)的原因之一。
需要注意的是,这种方式对record.data['name']的内容也非常敏感。例如,考虑一下如果使用Tom's而不是XYZ会发生什么。上面第一个选项的输出为
getReport('Tom's');...which显然是个问题。类似地,如果文本中有反斜杠,它将被视为结果中的转义字符,依此类推-有点雷区。
如果您可以更改您的renderLink,使其返回一个实际实例化的a元素,而不是字符串,这就是我要做的:
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
发布于 2011-10-21 21:30:42
getReport接收XYZ作为变量,而不是字符串,您需要将其放在引号中:
return '<a href="javascript:void(0);" onclick="getReport(\''+type+'\'); return false;"></a>';https://stackoverflow.com/questions/7850066
复制相似问题