[英]How to pass parameters to jQuery document.ready() function (ASP.NET MVC, C#)
我想從我的視圖中將參數傳遞給jQuery document.ready()函數 :
$(document).ready(function (parameter){
$('select[name=Product]').val(parameter);
});
如何從我的View中激活事件並傳遞參數? 我使用Razor作為View引擎。
謝謝
你不能。 document.ready函數不帶參數。 例如,您可以將此參數定義為視圖中的全局變量:
<script type="text/javascript">
var model = @Html.Raw(Json.Encode(Model));
</script>
然后在你單獨的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文件:
<!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>
在后一個文件中調用ready()
允許您將服務器參數傳遞給您的函數。 示例(使用PHP。在這種情況下,您必須將擴展名從html更改為php到此文件):
$(document).ready(start('<?php echo $serverParameter; ?>'));
您可以通過閉包有效地完成此操作。 也就是說,如果你正在調用類似$(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
。
要將此問題專門應用於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');
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.