Вы можете эффективно сделать это с закрытием.То есть, если вы вызываете что-то вроде $(document).ready(startup)
, вы можете легко переписать startup
, чтобы вызвать его с параметром, например $(document).ready(startup(7))
.Пабло дал превосходный недооцененный ответ, и стоит привести более подробный пример.
Пример
Вот страница, которая отображает предупреждение, вызванное $(document).ready()
, которое вычисляет 6*9
:
<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
function startup() {
alert('6 * 9 = ' + 6 * 9);
}
</script>
</head>
<body>
Hello!
<script>
$(document).ready(startup);
</script>
</body>
</html>
Допустим, вы хотите заменить «9» на переменный параметр.Четырехэтапный рецепт для этого:
- Параметризация функции.
- Заверните тело функции в закрытие.То есть
return function() {...}
. - Параметризация тела.
- Вызов функции с параметром.
Применение этого к коду выше:
<html>
<head>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
function startup(x) { // Step 1 - Parameterize the function
return function() { // Step 2 - Put body in "return function() {...}"
alert('6 * '+x+' = ' + 6 * x); // Step 3 - Parameterize the body.
} // (closing brace for step 2)
}
</script>
</head>
<body>
Hello!
<script>
$(document).ready(startup(7)); // Step 4 - Call function with parameter.
</script>
</body>
</html>
Отображает предупреждение "6 * 7 = 42".
Что происходит?
$(document).ready()
принимает в качестве параметра функцию.Вот почему он вызывается в первой версии выше с параметром startup
.Напротив, если бы вы вызывали его с помощью startup()
, вы бы больше не передавали функцию startup
, вы бы передавали возвращаемое значение из startup
.
, так как$(document).ready()
принимает функцию в качестве параметра, вот что мы ей даем: startup
преобразуется во второй приведенной выше версии в функцию, которая возвращает функцию, в которой для параметра x
установлено значение, которое мы передали ей изначально.Таким образом, startup(7)
возвращает функцию к $(document).ready()
со значением x
, установленным на 7
.
Вопрос ОП
Чтобы конкретно применить это к вопросу ОП,переписать этот вызов как
$(document).ready((function(x) { return function() {
$('select[name=Product]').val(x);
}})('name'));
, где 'name'
может быть любым другим значением, заменяющим x
.Нет необходимости в глобальных переменных.
Дополнительная информация: JavaScript-замыкания .