2011-10-21 73 views
5

我知道这是非常基本的JavaScript,但由于某种原因,我似乎无法让我的链接的onclick函数传递参数时工作。Javascript通过变量在href 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); 
} 
+0

你如何将这个HTML插入到DOM中? –

+0

什么是record.data ['name']? – Shyju

+0

它返回到extjs网格 – pm13

回答

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

你需要躲避字符串:

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

如果你看一下渲染HTML,你会看到这个问题:你getReport调用如下:

getReport(XYZ); 

我猜你想周围的报价,因此:

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

...这雷德ERS:

getReport('XYZ'); 

Live example

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

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

Live example

我指出这一点,并不是因为我推荐它(我不知道),但因为它要记住什么的真的事情是非常有用的onclick属性。这是我强烈建议使用适当的事件处理程序的原因之一(例如,通过addEventListener/attachEvent,或者甚至只是在实例化后才指定给a元素的onclick属性)。


需要注意的是这样做的这种方式也是对内容的record.data['name']很敏感很重要。例如,考虑如果不是XYZ它是Tom's会发生什么。上面的第一个选项的输出将是

getReport('Tom's'); 

......这显然是一个问题。同样,如果文本中有反斜杠,它将被视为结果中的转义字符等。  —有点雷区。

如果你都不可能改变你的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

0

getReport接收XYZ作为变量而不是作为一个字符串,你需要把里面的报价:

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