9

I am trying to pass a string in the onClick event handler function's arguments of the dynamically created anchor element, see the fiddle http://jsfiddle.net/shmdhussain/bXYe4/.

I am not able to pass the string to the function, but i am able to pass the number integer to the function. Please help me in this. Thanks in advance.

html:

<DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>test</title>
        <link rel="stylesheet" href="mystyle.css" class="cssfx"/>

        <script src="/jquery.min.js"></script>
        <script src="colon.js"></script>
    </head>

    <body>

        <div class="mytest">

        </div>


    </body>
</html>
</html>

Javascript:

var elem=[  {"name":"husain","url":"http://google.com","age":21},
            {"name":"ismail","url":"http://yahoo.com","age":22},
            {"name":"nambi","url":"http://msn.com","age":23}
         ]

jQuery(function($){
    var str="";
    for(i=0;i<elem.length;i++){
        str+="<a href='#' onclick='test('"+elem[i].url+"')'>dd</a><br><br>"
        console.log(str);

    }
    $('.mytest').html(str);

});

function test(url){
    console.log("url is "+url);
}

8 Answers 8

25

You have to use proper string sytax. This

"<a href='#' onclick='test('"+elem[i].url+"')'>dd</a><br><br>"

will result in

<a href='#' onclick='test('http://domain.tld')'>dd</a><br><br>

You cannot use ' for onclick and the parameters of test. Use \" instead.

"<a href='#' onclick='test(\""+elem[i].url+"\")'>dd</a><br><br>"

Which results in

<a href='#' onclick='test("http://domain.tld")'>dd</a><br><br>
Sign up to request clarification or add additional context in comments.

Comments

3

Your problem is, that str+="<a href='#' onclick='test('"+elem[i].url+"')'>dd</a><br/><br/>"; will return a string like "<a href='#' onclick='test('your_url')'>dd</a><br/><br/>". This will generate a html like this:

<a href='#' onclick='test('your_url')'>dd</a><br/><br/>

In this case, the onclick attribute contains only 'test('.

Try this:

str+="<a href='#' onclick='test(\""+elem[i].url+"\")'>dd</a><br/><br/>";

This will generate a html like this:

<a href='#' onclick='test("your_url")'>dd</a><br/><br/>

1 Comment

@Sébastien, str+="<a href='#' onclick='test(\""+elem[i]+"\")'>dd</a><br/><br/>"; How should we pass object to test function directly as you pass onclick='test(\""+elem[i].url+"\")'>.....in this scenario.You have passed url here but how can we pass object arr[i] . Can you please help.
1

Directly use:

test('"+elem[i].url+"') 

instead of:

'test('"+elem[i].url+"')' 

to pass the string inside a method.

Comments

1

If I didn't misunderstand your question, here is your answer;

var elem=[  {"name":"husain","url":"http://google.com","age":21},
    {"name":"ismail","url":"http://yahoo.com","age":22},
    {"name":"nambi","url":"http://msn.com","age":23}
]

jQuery(function($){
    var str="";
    for(i=0;i<elem.length;i++){
        var a =$('<a>',{href:'#',text:'dd'});
        a.click(function(e){
               test(elem[i].url)
        });
        $('.mytest').append(a).append($('</br>')).append($('</br>'));

    }
});

function test(url){
    console.log("url is "+url);
}

1 Comment

This is also another method to implement, thanks Whispered. But i implement in the same way as i want from AmShaegar 's answer below.
1

For passing multiple parameters you can cast the string by concatenating it with the ASCII value like, for single quotes we can use &#39;

var str= "&#39;"+ str+ "&#39;";

the same parameter you can pass to the onclick(str) event.It is helpful in cases where we pass multiple parameters.It works with every browser.

Comments

0

Directly use:

test('elem[i].url') 

instead of:

test('"+elem[i].url+"')

to pass the string inside a method.

Comments

0
var funcName = "SelectPickerBtnSelectEvent('" + str + "')";
$(".btn.dropdown-toggle.btn-light").attr("onclick", funcName);

Comments

0

perhaps instead, use a data attribute on the element to hold the string. then in the function retrieve the data.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.