2013-05-02 63 views
0

我想对象作为参数传递给javascript函数和传递对象作为参数的javascript函数

我曾试图用下面的,实际上的IAM调用函数中的innerHTML功能..

var tempObj={ 
     result:results, 
     jsobj:jsObj 
    } 

    str +='<input type="button" onclick="buildCstrWiseChart('+tempObj+')" value="View" class="btn btn-info">'; 

但didnt工作对我来说IAM收到错误如..

SyntaxError: missing ] after element list 
[Break On This Error] 

buildCstrWiseChart([object Object]) 

可以在此任意一个帮助..

+4

这是有效的JavaScript代码,应该工作,显示更多的代码,我想你的错误是在别的地方 – x4rf41 2013-05-02 14:31:45

+0

'someFunc'做什么?你怎么样/你在哪里打电话? – 2013-05-02 14:31:51

+2

您需要发布整个/实际的代码,特别是带有列表的部分。语法错误应该有一个行号。 – Bergi 2013-05-02 14:32:01

回答

4

您将对象看作是一个字符串。这是错误。

tempObj是全局变量吗?如果是这样,只是做

str +='<input type="button" onclick="buildCstrWiseChart(tempObj)" value="View" class="btn btn-info">';` 
+0

+1如果它不是全局的,则OP需要使其全局可访问,以使对象可以从内联处理程序属性中访问。 – 2013-05-02 14:42:57

+0

感谢它的工作..最初我试了这个..但它没有工作,然后...是的,这就是工作正常,当我宣布变量全球..我知道为什么要宣布该变量为全球.. – sasi 2013-05-02 14:46:26

+0

像@squint说,你的'onclick'处理程序需要知道'tempObj'是什么。所以如果'tempObj'不是全局的,处理程序就不知道它是什么。说得通? – 2013-05-02 14:48:36

-1

嗯,问题出在你的功能someFunc

下面的示例工作完全正常:

var f = function (el){ 
    alert(el) 
}; 

var x = {a: "hey", b: "ho"}; 

然后

f('hi'); 
f(x); 

没有给出错误。

0

注意:OP已更改自最初发布以来发布的代码。

我打赌的问题是这样的:

...onclick="buildCstrWiseChart('+tempObj+')"... 

我不认为当tempObj不是字符串以外的东西会工作。在任何情况下似乎都是危险的。

你真的需要做的不是把实际的对象放在字符串中,而是放入一个引用它的值(也许建立一个id:object的字典)并且只包含id作为数据属性。然后在您的onclick方法中,您可以查找该属性,并找到提供的ID的对象。

+3

我们似乎有一个驱动器downvoter ... – PhonicUK 2013-05-02 14:35:41

+1

你有足够的代表知道这不是一个答案。这是一个评论,只是说明给定的代码有效。 – 2013-05-02 14:36:36

+1

“它对我有用”并不完全是对问题的回答,所以降价不应该是一个惊喜。 – 2013-05-02 14:37:14

2

对象的字符串表示只是[object Object]所以当你试图来连接它构建HTML当你结束了

onclick="buildCstrWiseChart([object Object])" 

这不是有效的HTML。 [object部分被解析为数组的开头,但Object]部分不是有效的数组语法。

我建议,而不是建立一个HTML字符串,而是你使用jQuery实际创建的DOM元素:

$('<input type="button"/>', { 
    value: 'View', 
    className: 'btn btn-info' 
}).click(function() { 
    buildCstrWiseChart(tempObj); 
}); 

然后使用该.append().appendTo() jQuery函数到元素添加到任何含有你想要它在里面的元素。

+1

我认为这个答案应该得到一些upvotes,因为另一个正在使用一些非常糟糕的方式来解决这个问题。第一:不要声明内联处理程序,第二:不要仅仅因为无法访问它们而将变量放在全局范围内。至少将它们包装在一个全局对象中。 – HMR 2013-05-02 14:56:32

相关问题