簡體   English   中英

如何將參數傳遞給jQuery document.ready()函數(ASP.NET MVC,C#)

[英]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”。 這樣做的四步方法是:

  1. 參數化功能。
  2. 將函數體包裹在一個閉包中。 也就是說, return function() {...}
  3. 參數化身體。
  4. 使用參數調用該函數。

將此應用於上述代碼:

<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閉包

如果您的參數值在視圖中內聯,則可以簡單地將參數值回顯到Javascript代碼中。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM