Nés*_* A. 8 javascript asp.net-mvc jquery
我在这个场景中丢失了jquery datepicker功能......
1-最初我有一个普通的视图,工作正常,有这个日期输入代码...
<input type="text" name="date_start" id="date_start"
value="@(Model.TimeStart)" />
<script language="javascript" type="text/javascript">
$("#date_start").datepicker();
</script>
Run Code Online (Sandbox Code Playgroud)
2-然后,我在部分视图中转换了该视图,动态加载了...
$('#TargetEmptyDiv').load("/MyController/MyAction");
Run Code Online (Sandbox Code Playgroud)
3-部分视图加载正常,数据可以(手动)输入并且一切正常.唯一的问题是jquery datepicker不再有效.我试着在加载后分配它,使用这个......
$('#TargetEmptyDiv').load("/MyController/MyAction",
function () { $("#date_start").datepicker(); });
Run Code Online (Sandbox Code Playgroud)
那没用.
4-后来我了解到jquery提供了live()和delegate()函数,这些函数能够将javascript代码附加到"现在和将来"加载的元素中.所以,我在文档初始化中尝试了这个...
<script type="text/javascript">
$(document).ready(function () {
$("#date_start").live("click", function () { $(this).datepicker(); });
});
</script>
Run Code Online (Sandbox Code Playgroud)
后来也......
<script type="text/javascript">
$(document).ready(function () {
$("#date_start").delegate("click", function () { $(this).datepicker(); });
});
</script>
Run Code Online (Sandbox Code Playgroud)
没有一个工作,可能是因为他们直接引用了"click"事件,但是datepicker是"附加"(如果这是正确的术语)整个元素.
所以,问题是:如何使jquery datepicker适用于动态加载后加载的元素???
谢谢你的时间!
已解决:问题是在_Layout.cshtml的底部有这条线...
@Scripts.Render("~/bundles/jquery")
Run Code Online (Sandbox Code Playgroud)
..which加载jquery库的缩小版本(已经由我自己引用).因此,库被加载两次并且无效,产生错误"datepicker()不是函数".
只是评论或删除该行,使所有工作正常!
在我看来,#3 中的方法应该有效,因此您似乎需要进行一些调试。尝试这个:
debugger一行(例如见下文)应该发生的是您的浏览器将在此时暂停。但是,如果事情没有按您的预期工作,它可能根本不会命中该代码,然后您就不会再有任何停顿。
如果确实暂停,请使用控制台检查 ; 的值$("#date_start")。jQuery 选择器可能没有抓住您认为的内容。
这是debugger您的代码的示例:
$('#TargetEmptyDiv').load("/MyController/MyAction", function () {
debugger;
$("#date_start").datepicker();
});
Run Code Online (Sandbox Code Playgroud)