Как передать параметры в функцию jQuery document.ready () (ASP.NET MVC, C #) - PullRequest
10 голосов
/ 12 мая 2011

Я хотел бы передать параметр в функцию jQuery document.ready () из моего представления:

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

Как я могу запустить событие из моего просмотра и передать параметр? Я использую Razor в качестве движка View.

Спасибо

Ответы [ 4 ]

19 голосов
/ 12 мая 2011

Вы не можете. Функция document.ready не принимает параметры. Например, вы можете определить этот параметр как глобальную переменную в вашем представлении:

<script type="text/javascript">
    var model = @Html.Raw(Json.Encode(Model));
</script>

и затем в вашем отдельном файле javascript используйте эту глобальную переменную:

$(function() {
    $('select[name=Product]').val(model.SomeProperty);
});
17 голосов
/ 02 июля 2013

Чтобы избежать использования глобальных переменных, вы можете определить замыкание и затем вернуть эту функцию в ready():

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

, а затем позвоните ready():

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

Вы также можете определить функцию запуска во внешнем файле .js и вызвать готовность (например) в вашем основном html-файле. Пример: 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; ?>'));
5 голосов
/ 06 декабря 2014

Вы можете эффективно сделать это с закрытием.То есть, если вы вызываете что-то вроде $(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.

Вопрос ОП

Чтобы конкретно применить это к вопросу ОП,переписать этот вызов как

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

, где 'name' может быть любым другим значением, заменяющим x.Нет необходимости в глобальных переменных.

Дополнительная информация: JavaScript-замыкания .

1 голос
/ 12 мая 2011

Вы можете просто перенести значение вашего параметра в код Javascript, если он встроен в ваше представление.

$(document).ready(function (){
        $('select[name=Product]').val('@ViewBag.Parameter');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...