2012-01-18 83 views
3

我想将一些动态参数传递给jquery onClick事件。之前,我用这个HTML和JavaScript:如何将动态参数传递给jquery函数

<!-- 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. 

我不满意这个解决方案(通过PARAMS内联隐藏值)。在像这样的情况下,其他更好的方法将动态参数传递给jQuery?

+0

$ {}参数1其实就是JSTL表达 – newcoderintown

回答

4

为此,建议使用数据属性。用途:

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

然后:

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

对不起,如果这是初学者愚蠢的问题。数据属性是HTML5标准,在旧版浏览器中也是如此。 – newcoderintown

+0

这个特殊的功能一直支持到IE 7(也许还有6,没有检查,坦率地说)。这一切都归功于jQuery完成所有标准化问题,因此您不必担心太多。有关详细信息,请参阅http://stackoverflow.com/questions/2412947/do-html5-custom-data-attributes-work-in-ie-6。 – Slavic

+0

@Slavic - 数据属性真的向后兼容。不知道如何倒退,但绝对是IE6,甚至更老。 – Anurag

4

您可以像以前那样内联这些参数。

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

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

+0

对我来说,$ {}参数1 JSTL是表达这是由框架发送从Java代码的JSP。这个变量也可以像JavaScript一样在JavaScript中访问。 Jsp文件可以读取这些变量,但也可以这样做JavaScript文件吗? – newcoderintown

+0

哦,我认为这是一个PHP语法。我对JSP不太熟悉。 –

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>