Как передать параметры в документ 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 для этого:
- параметризовать функцию.
- оберните тело функции в закрытие. То есть,
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
функция больше, вы бы проходя в возвращаемое значение 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');
});