您可以通过闭包有效地完成此操作。也就是说,如果您正在调用类似 $(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”。执行此操作的 4 步方法是:
- 参数化函数。
- 将函数体包装在一个闭包中。即
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。
OP 的问题
要专门将此应用于 OP 的问题,请将调用重写为
$(document).ready((function(x) { return function() {
$('select[name=Product]').val(x);
}})('name'));
其中'name' 可以是替换x 的任何其他值。不需要全局变量。
更多信息:JavaScript closures。