每次使用ajax呈现局部视图时都运行jquery代码
我正在使用Ajax.Actionlink在MVC中呈现partialview。我还使用Modernizer datepicker,这样firefox就可以像Chrome一样,输入类型为date 当我单击第一个Ajax actionlink时,日期选择器工作正常。但当我再次点击它时,它根本不起作用 如果我重新加载页面(F5),它会再次工作,第一次,而不是第二次和以后 如何修复它,使jQuery代码每次都运行,即使我切换到另一个局部视图 我的JS:每次使用ajax呈现局部视图时都运行jquery代码,jquery,ajax,asp.net-mvc,datepicker,Jquery,Ajax,Asp.net Mvc,Datepicker,我正在使用Ajax.Actionlink在MVC中呈现partialview。我还使用Modernizer datepicker,这样firefox就可以像Chrome一样,输入类型为date 当我单击第一个Ajax actionlink时,日期选择器工作正常。但当我再次点击它时,它根本不起作用 如果我重新加载页面(F5),它会再次工作,第一次,而不是第二次和以后 如何修复它,使jQuery代码每次都运行,即使我切换到另一个局部视图 我的JS: <script> $.noCo
<script>
$.noConflict();
if (!Modernizr.inputtypes.date) {
$('input[type=date]').datepicker({ dateFormat: 'yy-mm-dd' });
}
</script>
$.noConflict();
如果(!Modernizer.inputtypes.date){
$('input[type=date]')。日期选择器({dateFormat:'yy-mm-dd'});
}
编辑:我尝试过用$(函数(){…})包装JS;代码在局部视图中。还尝试使用OnSuccess选项,但结果相同。它只运行第一次,然后我需要重新加载页面
编辑2:
我的Ajax操作链接:
<div id="createCalcMenu">
@Ajax.ActionLink("Annuity", "Annuity", "Calculation", new AjaxOptions
{
UpdateTargetId = "calcDiv",
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST"
})
<br />
@Ajax.ActionLink("Amortization", "Amortization", "Calculation", new AjaxOptions
{
UpdateTargetId = "calcDiv",
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST"
})
</div>
<div id="calcDiv"></div>
@ActionLink(“年金”、“年金”、“计算”,新的AjaxOptions
{
UpdateTargetId=“calcDiv”,
InsertionMode=InsertionMode.Replace,
HttpMethod=“POST”
})
@ActionLink(“摊销”、“摊销”、“计算”,新的AjaxOptions
{
UpdateTargetId=“calcDiv”,
InsertionMode=InsertionMode.Replace,
HttpMethod=“POST”
})
编辑3:
我的观点:
@using (Ajax.BeginForm("ShowDetailAnnuity", "Calculation", new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "CalcDetail",
LoadingElementId = "Loader"
}))
{
<input type="date" id="StartDate" name="startdate" title="Please enter start date (YYYY-mm-dd)" class="startDateTextbox" required />
//Rest of the form here...
<input type="submit" id="calcBtn" class="calcBtn" name="SubmitValue" value="Calculate" title="Calculate your calculation" />
}
<script>
$(function () {
$.noConflict();
if (!Modernizr.inputtypes.date) {
$('input[type=date]').datepicker({ dateFormat: 'yy-mm-dd' });
}
});
</script>
@使用(Ajax.BeginForm(“ShowDetailAnnuity”,“Calculation”),新的AjaxOptions
{
InsertionMode=InsertionMode.Replace,
UpdateTargetId=“CalcDetail”,
LoadingElementId=“Loader”
}))
{
//表格的其余部分在这里。。。
}
$(函数(){
$.noConflict();
如果(!Modernizer.inputtypes.date){
$('input[type=date]')。日期选择器({dateFormat:'yy-mm-dd'});
}
});
我认为问题可能出在jQuery上
我复制了您的代码,只是对部分视图的脚本做了一个小的更改。
当我第一次运行代码时,它给了我一个错误,说$is not defined(尽管我已经在主布局中包含了jQuery库)。
我在局部布局中手动调用了jQuery,它成功了。我希望它能帮助你
以下是我在年金部分视图代码中所做的更改:
<script>
jQuery(function ($) {
$.noConflict();
if (!Modernizr.inputtypes.date) {
$('input[type=date]').datepicker({ dateFormat: 'yy-mm-dd' });
}
});
</script>
jQuery(函数($){
$.noConflict();
如果(!Modernizer.inputtypes.date){
$('input[type=date]')。日期选择器({dateFormat:'yy-mm-dd'});
}
});
无论我点击链接多少次,日期选择器总是为我而来。还要确保您只对JS文件jquery和mordernizr进行了一次引用(在主布局中)将此脚本放在部分视图中,或者将此脚本添加到
Ajax的OnSuccess
中。ActionLink
脚本在您使用jquery的部分视图中,因此它不在$(function(){…})中代码>doc ready block.@Jai与我(尝试过的)代码相同的结果我也尝试过将OnSuccess=“alert('blablabla')”添加到actionlinks,但它(就像jquery代码一样)只在第一次运行。然后我需要重新加载页面,使其再次显示,并获得相同的结果。我真的不明白为什么。可能是冲突或其他问题,你如何在主题中调用你的脚本?我想问的是,这是在jQuery之后被称为modernizr的吗?是的,modernizr是在jQuery之后被称为modernizr的,我想我可能知道你为什么会得到这个。您是否也在局部视图中包含了jQuery js文件?如果有,那么应该删除部分视图中的引用(jquery和mordernizr),在主布局中只调用一次,然后使用我提到的脚本。我在主布局视图中只链接了jquery和modernizr