Как передать параметры в документ jQuery.функция ready () (ASP.NET MVC, C#)

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

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

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

спасибо

4 ответов


вы не можете. Документ.готова функция не принимает параметров. Например, вы можете определить этот параметр как глобальную переменную в вид:

<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-файл и вызов ready (например) в вашем основном html-файле. Образец: внешний скрипт.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" с переменный параметр. Рецепт 4-step для этого:

  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 функция больше, вы бы проходя в возвращаемое значение of 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');
});