3

I want to pass some dynamic paramters to jquery onClick event. Before, I used this HTML and JavaScript:

<!-- HTML -->
<a id="link123" href="link1" onClick="javascript:func1(${param1},${param2});">123</a>
/* JavaScript */
func1(param1,param2) {
   // do something
}

The parameters param1 and param2 come from backend code and are dynamic. How I get this is not important here.

After using jQuery, I have this HTML and JS:

<a href="link123">
<input type="hidden" id="param1" value="${param1}"/>
<input type="hidden" id="param2" value="${param2}"/>
$(document).ready(function() {
  $("#link123").click(function() {
    var param1 = $("#param1")[0].value;
    var param1 = $("#param1")[0].value;
    func1(param1,param2);
  });
});

func1(param1,param2) {
  //do something
}
function func1 is there as before.

I'm not happy with this solution (passing params as inline hidden values). What are other, better ways to pass dynamic parameters to jQuery, in situation like this?

1
  • ${param1} is actually JSTL expression Commented Jan 18, 2012 at 11:10

3 Answers 3

4

Data attributes are advised for this purpose. Use:

<input data-param1="${param1}" />

And then:

$('input').click(function(){
   $(this).attr('data-param1');
});
Sign up to request clarification or add additional context in comments.

4 Comments

Sorry, if this is beginner stupid question. Data attributes are HTML5 standards, so does this work also in old browsers ?
This particular functionality is supported all the way to IE 7 ( maybe also 6, hadn't checked, to be frank). It's all due to jQuery doing all the standardization issues on it's side, so you don't have to worry about much. See stackoverflow.com/questions/2412947/… for details.
@Slavic - data attributes are really backwards compatible. No sure how backwards, but definitely IE6, and maybe even older.
close the paranthesis
4

You could inline those parameters like you did before.

  $("#link123").click(function() {
    func1(${param1}, ${param2});
  });

That is, your PHP (or whatever) generates javascript with already substituted param values.

2 Comments

In my case, ${param1} is JSTL expression which is send by framework from java code to jsp. Is this variable also accessible in javascript like you did before. Jsp file can read these variables, but can javascript file as well do so ?
Oh, I thought it's a PHP syntax. I'm not too familiar with JSP.
0

I assume you are trying to pass variable values from backend scripting language to Javascript? One possible way is to output them directly to the javascript

<script language='JavaScript'>
//it's a good idea to have all those vars collected in a single object in order to not overpopulate the global scope
var scriptOutput = {
    param1 : ${param1},
    param2 : ${param1}
}
$(document).ready(function() {
    $("#link123").click(function() {
        func1(scriptOutput.param1,scriptOutput.param2);
    });
});
</script>

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.