sasi
sasi

Reputation: 4328

Passing Objects as Parameters in javascript function

I want to pass Objects as parameters to the javascript function and

I had tried with the following,Actually iam calling the function the function in innerHtml..

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

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

but this didnt works for me iam getting the error like..

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

buildCstrWiseChart([object Object])

can any one help in this..

Upvotes: 0

Views: 3173

Answers (4)

Anthony Grist
Anthony Grist

Reputation: 38345

The string representation of an object is just [object Object] so when you attempt to concatenate it when building your HTML you end up with

onclick="buildCstrWiseChart([object Object])"

which isn't valid HTML. The [object part is parsed as the start of an array, but the Object] part isn't valid array syntax.

I'd suggest, rather than building a HTML string, you instead use jQuery to actually create the DOM element:

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

Then use either the .append() or .appendTo() jQuery function to add that element to whatever containing element you want it to be inside of.

Upvotes: 2

PhonicUK
PhonicUK

Reputation: 13864

NB: OP has changed the code posted since originally posting.

I'd wager the issue is with this:

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

I don't think that'd work when tempObj isn't something other than a string. Seems dangerous to do in any case.

What you'd really need to do is instead of putting the actual object in the string, put in a value that references it (perhaps build a dictionary of id:object) and just include the id as a data-attribute. Then in your onclick method you can look up that attribute, and find the object for the supplied ID.

Upvotes: 0

Terry Young
Terry Young

Reputation: 3531

You were treating an object as if it were a string. That's the error.

Is tempObj a global variable? If so, just do

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

Upvotes: 4

Cedric Reichenbach
Cedric Reichenbach

Reputation: 9319

Well, the problem is in your function someFunc.

The following example works perfectly fine:

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

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

Then

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

gives no errors.

Upvotes: -1

Related Questions