如何将动态参数传递给jQuery函数

3

我希望能够在jquery的onClick事件中传递一些动态参数。之前,我使用了以下HTML和JavaScript:

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

/* JavaScript */
func1(param1,param2) {
   // do something
}

参数param1param2来自后端代码,是动态的。如何获取这些参数在此处不重要。

使用jQuery后,我得到了以下HTML和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.

我不满意这种解决方案(将参数作为内联隐藏值传递)。在这种情况下,传递动态参数给jQuery的其他更好的方法有哪些?


${param1} 实际上是 JSTL 表达式。 - newcoderintown
3个回答

4
您可以像之前一样内联这些参数。
  $("#link123").click(function() {
    func1(${param1}, ${param2});
  });

也就是说,你的PHP(或其他语言)生成包含已经替换参数值的JavaScript代码。

在我的情况下,${param1} 是 JSTL 表达式,由框架从 Java 代码发送到 JSP。这个变量是否也可以像之前一样在 JavaScript 中访问?JSP 文件可以读取这些变量,但是 JavaScript 文件也能够这样做吗? - newcoderintown
哦,我以为这是 PHP 语法。我对 JSP 不太熟悉。 - Sergio Tulentsev

4

建议使用数据属性来实现此目的。使用以下代码:

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

接下来:

$('input').click(function(){
   $(this).attr('data-param1');
});

抱歉,如果这是一个初学者很愚蠢的问题。数据属性是HTML5标准,那么它在旧浏览器中也能工作吗? - newcoderintown
这个特定的功能支持到IE 7(也许还有6,坦白说我没有检查过)。这都归功于jQuery在其方面处理所有标准化问题,因此您不必担心太多。有关详细信息,请参见https://dev59.com/UXE95IYBdhLWcg3wMrEB。 - Slavic
@Slavic - 数据属性确实是向后兼容的。不确定有多向后兼容,但肯定支持IE6,甚至可能更早的版本。 - Anurag
关闭括号。 - Arun

0

我猜你正在尝试从后端脚本语言传递变量值到Javascript?一种可能的方法是直接将它们输出到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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接