MVC局部视图中的Javascript在视图被替换时停止工作
在标题中解释这个问题有点困难,但我已经尽力了。。这是关于从主视图使用Javascript的部分视图。 所以我正在建立一个使用向导驱动的注册表的网站。我使用了这个教程 我有一个主视图(Register.cshtml),其中包含用于加载局部视图的div。 用户在步骤1中输入一些数据,然后是步骤2,依此类推。在步骤1中,我有一个日期选择器供用户选择日期。输入字段(id为datetimepicker2)使用som JavaScript,如下所示。加载Register.cshtml并显示步骤1的部分视图时,它可以正常工作。但是如果用户从步骤2返回到步骤1,则日期选择器停止工作。当我将光标放在输入字段中时,不会发生任何事情。 如果我看源代码,脚本仍然存在,所以我想知道为什么它找不到我的datetimepicker2 因此,场景是开始注册->步骤1(日期选择器工作)->步骤2->返回到步骤1(日期选择器不工作) \u Layout.cshtmlMVC局部视图中的Javascript在视图被替换时停止工作,javascript,jquery,asp.net-mvc,asp.net-mvc-partialview,Javascript,Jquery,Asp.net Mvc,Asp.net Mvc Partialview,在标题中解释这个问题有点困难,但我已经尽力了。。这是关于从主视图使用Javascript的部分视图。 所以我正在建立一个使用向导驱动的注册表的网站。我使用了这个教程 我有一个主视图(Register.cshtml),其中包含用于加载局部视图的div。 用户在步骤1中输入一些数据,然后是步骤2,依此类推。在步骤1中,我有一个日期选择器供用户选择日期。输入字段(id为datetimepicker2)使用som JavaScript,如下所示。加载Register.cshtml并显示步骤1的部分视图时
@RenderSection("scripts", required: false)
<div id="divContainer">
@Html.Partial("_StepOne") <!-- Step one is shown as default-->
</div>
@section scripts { <!-- This is the script that only works the first time -->
<script type="text/javascript">
$(document).ready($(function () {
$('#datetimepicker2').datetimepicker({
locale: 'da',
format: 'DD-MM-YYYY'
});
}));
</script>
}
Register.cshtml
@RenderSection("scripts", required: false)
<div id="divContainer">
@Html.Partial("_StepOne") <!-- Step one is shown as default-->
</div>
@section scripts { <!-- This is the script that only works the first time -->
<script type="text/javascript">
$(document).ready($(function () {
$('#datetimepicker2').datetimepicker({
locale: 'da',
format: 'DD-MM-YYYY'
});
}));
</script>
}
所以我在哈利提供线索后找到了答案。 我将JavaScript更改为:
$(document).on('focusin', '#datetimepicker2', function () {
$(this).datetimepicker({
locale: 'da',
format: 'DD-MM-YYYY'
});
});
现在它可以工作了:)哦,我以前在mvc中从未遇到过这种情况。很遗憾听到这个消息。我在webforms中遇到过这个问题,不过是更新面板。这是因为当部分页面上的元素重新加载时,jquery不会将选择器重新绑定到这些元素上,我认为。。。也许不是。无论如何,尝试在部分视图中引用您需要的所有脚本,即使您已经在父页面上引用了它们。太好了!你的评论让我找到了答案:)我在谷歌上搜索了“jquery重新绑定”,发现了这篇帖子:
$(document).on('focusin', '#datetimepicker2', function () {
$(this).datetimepicker({
locale: 'da',
format: 'DD-MM-YYYY'
});
});