Cic*_*ami 10 c# jquery razor asp.net-mvc-3
我想从我的视图中将参数传递给jQuery document.ready()函数:
$(document).ready(function (parameter){
$('select[name=Product]').val(parameter);
});
Run Code Online (Sandbox Code Playgroud)
如何从我的View中触发事件并传递参数?我使用Razor作为View引擎.
谢谢
Dar*_*rov 19
你不能.document.ready函数不带参数.例如,您可以将此参数定义为视图中的全局变量:
<script type="text/javascript">
var model = @Html.Raw(Json.Encode(Model));
</script>
Run Code Online (Sandbox Code Playgroud)
然后在你单独的javascript文件中使用这个全局变量:
$(function() {
$('select[name=Product]').val(model.SomeProperty);
});
Run Code Online (Sandbox Code Playgroud)
小智 18
要避免使用全局变量,可以定义闭包,然后将此函数返回到ready():
function start(parameter)
{
return function()
{
/*...use parameter */
alert('parameter: ' + parameter);
}
}
Run Code Online (Sandbox Code Playgroud)
然后打电话ready():
$(document).ready(start('someValue'));
Run Code Online (Sandbox Code Playgroud)
您还可以在外部.js文件中定义启动函数,并在主html文件中调用ready(例如).示例:external script.js:
function start(parameter)
{
return function()
{
/*...use parameter */
alert('parameter: ' + parameter);
}
}
Run Code Online (Sandbox Code Playgroud)
html文件:
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script type="text/javascript" src="script.js"></script>
<script>
$(document).ready(start('someValue'));
</script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
调用ready()后一个文件允许您将服务器参数传递给您的函数.示例(使用PHP.在这种情况下,您必须将扩展名从html更改为php到此文件):
$(document).ready(start('<?php echo $serverParameter; ?>'));
Run Code Online (Sandbox Code Playgroud)
您可以通过闭包有效地完成此操作.也就是说,如果您正在调用类似的东西,$(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>
Run Code Online (Sandbox Code Playgroud)
假设您要用可变参数替换"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>
Run Code Online (Sandbox Code Playgroud)
这会显示警告"6*7 = 42".
$(document).ready()将参数作为参数.这就是为什么在上面的第一个版本中调用它startup作为参数.相反,如果你把它叫做startup()你就不会在路过startup功能了,你会被传入返回值的startup.
由于$(document).ready()函数作为参数,我们给它的startup是:在上面的第二个版本中转换为一个返回函数的函数,该函数的参数x设置为我们最初传递的值.也就是说,startup(7)返回一个$(document).ready()具有xset 值的函数7.
要将此问题专门应用于OP的问题,请将该调用重写为
$(document).ready((function(x) { return function() {
$('select[name=Product]').val(x);
}})('name'));
Run Code Online (Sandbox Code Playgroud)
哪里'name'可以是替代的任何其他值x.不需要全局变量.
更多信息:JavaScript闭包.