如何将参数传递给jQuery document.ready()函数(ASP.NET MVC,C#)

我想从我的视图中将参数传递给jQuery document.ready()函数

$(document).ready(function (parameter){ $('select[name=Product]').val(parameter); }); 

如何从我的View中触发事件并传递参数? 我使用Razor作为View引擎。

谢谢

你不能。 document.ready函数不接受参数。 例如,您可以将此参数定义为视图中的全局变量:

  

然后在你单独的javascript文件中使用这个全局变量:

 $(function() { $('select[name=Product]').val(model.SomeProperty); }); 

要避免使用全局变量,可以定义闭包,然后将此函数返回到ready()

 function start(parameter) { return function() { /*...use parameter */ alert('parameter: ' + parameter); } } 

然后调用ready()

 $(document).ready(start('someValue')); 

您还可以在外部.js文件中定义启动函数,并在主html文件中调用ready(例如)。 示例:external script.js:

 function start(parameter) { return function() { /*...use parameter */ alert('parameter: ' + parameter); } } 

html文件:

           

在后一个文件中调用ready()允许您将服务器参数传递给您的函数。 示例(使用PHP。在这种情况下,您必须将扩展名从html更改为php到此文件):

 $(document).ready(start('')); 

您可以通过闭包有效地完成此操作。 也就是说,如果你调用类似$(document).ready(startup)那么你可以轻松地重写startup这样你就可以使用参数调用它,例如$(document).ready(startup(7)) 。 巴勃罗给出了一个非常低估的答案,值得给出一个更详细的例子。

这是一个显示由$(document).ready()调用的警报的页面,它计算6*9

       Hello!    

假设您要用可变参数替换“9”。 这样做的四步方法是:

  1. 参数化该function。
  2. 将function体包裹在一个封闭物中。 也就是说, return function() {...}
  3. 参数化身体。
  4. 使用参数调用该函数。

将此应用于上面的代码:

       Hello!    

这会显示警告“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闭包 。

如果您的参数值在视图中内联,则可以简单地将参数值回显到Javascript代码中。

 $(document).ready(function (){ $('select[name=Product]').val('@ViewBag.Parameter'); });