2012-01-18 4 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 
} 

param1 Параметры и param2 поступают из бэкэнда кода и являются динамическими. Как я понимаю, здесь это не важно.

После использования 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

$ {param1} на самом деле 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

В моем случае, $ {param1} является JSTL выражение, которое посылает рамки из кода Java в JSP. Эта переменная также доступна в javascript, как и раньше. Jsp-файл может читать эти переменные, но может ли файл javascript также делать это? – newcoderintown

+0

О, я думал, что это синтаксис PHP. Я не очень хорошо знаком с JSP. –

0

Я предполагаю, что вы пытаетесь передать значения переменных из языка сценариев бэкенд в 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> 
Смежные вопросы