在使用部分视图时只添加一次javascript代码

在使用部分视图时只添加一次javascript代码,javascript,jquery,asp.net-mvc-partialview,Javascript,Jquery,Asp.net Mvc Partialview,我有一个局部视图,它本身就在局部视图中。最内部局部视图中的内容可以多次渲染。我有一个javascript代码,它只对最里面的视图有意义。因此,当内容呈现不止一次时,javascript代码被添加两次,事件被调用两次。e、 g var isDccmAndReady = '@isDccmAndReady'; $(document).ready(function() { $(function() { $("input[name='ReportDate']").change(f

我有一个局部视图,它本身就在局部视图中。最内部局部视图中的内容可以多次渲染。我有一个javascript代码,它只对最里面的视图有意义。因此,当内容呈现不止一次时,javascript代码被添加两次,事件被调用两次。e、 g

var isDccmAndReady = '@isDccmAndReady';

$(document).ready(function() {
    $(function() {
        $("input[name='ReportDate']").change(function() {
            if (isDccmAndReady) {
                var d = new Date();
                var currentDate = (d.getMonth() + 1) + "/" + +d.getDate() + "/" + d.getFullYear();

                var dateSelected = $(this).val();

                if (new Date(dateSelected) > new Date(currentDate)) {
                    var answer = confirm("The contract has been already reported, are you sure you wish to continue?");
                if (answer) {
                    return true;
                } else {
                    $(this).val('@Model.OriginalReportDate.Value.ToShortDateString()');
                    return false;
                }
            }
        }
        return false;
    });
});

现在,如果文本框被嵌入两次,那么当其中一个文本框中发生更改时,将调用两次更改事件。如何避免此问题?

我不确定您想要什么,如果您希望函数只运行一次,可以使用下划线“一次”函数:

var newfunction = _.once(yourfunction);
newfunction();
newfunction();
如果您的目的是防止事件处理程序在元素中添加多次,则可以先解除事件绑定,然后再次绑定,如下所示:

$("#someselector").unbind("change").change(function(){
})

终于开始工作了。我在分部视图中添加了以下javascript,其中调用了最内部的分部,以便javascript在dom中注册一次

$(document).ready(function () {

    $(function () {
        $("input[name='ReportDate']").change(function () {

            if ($(this).attr('data-isDccmAndReady')) {

                var d = new Date();
                var currentDate = (d.getMonth() + 1) + "/" + +d.getDate() + "/" + d.getFullYear();

                var dateSelected = $(this).val();

                if (new Date(dateSelected) > new Date(currentDate)) {
                    var answer = confirm("The contract has been already reported, are you sure you wish to continue?");

                    if (answer) {
                        return true;
                    } else {
                        $(this).val($(this).attr('data-originalReportDateVal'));
                        return false;
                    }
                }
            }

            return false;
        });
    });

});