页面重新加载时未命中更改功能

Posted

技术标签:

【中文标题】页面重新加载时未命中更改功能【英文标题】:Change function not being hit on page reload 【发布时间】:2021-06-02 00:33:11 【问题描述】:

我有一个cshtml 视图,它在头部声明了一个 js 文档,在正文中加载了一个部分

<head>
    <script src="~/js/Project/doc.js"></script>
</head>

和部分

<div class="panel" id="panelDoc">
    <partial name="_docInformation" model=Model.Doc />
</div>

这个部分加载了一个包含各种表格和下拉列表的部分视图。 doc.js 具有以下功能,可以根据用户选择的文档类型再次获取页面上的信息,将panelDoc 中的html替换为新信息的部分:

$(document).ready(function () 

    $('#docType').change(function () 
        debugger;
        // Get the selected document type from the dropdown via ID
        var docType = $('#docType option:selected').val();

        var form = 
            ProjectID: $('#ProjectID').val(),
            DocType: docType
        ;

        $.ajax(
            url:  '/Project/LoadDocumentPartial',
            type: 'POST',
            data: form,
            success: function (result) 
                if (result.success != undefined && !result.success) 
                    // Show error stuff
                
                else 
                    // Replace the current html in id with new html
                    $('#panelDoc').html(result);
                
            
        );
    );
);

这在第一次加载部分时有效,因为我可以更改下拉菜单并点击此功能,用新信息替换内容。但是,如果我再次更改下拉菜单,它永远不会点击此功能。

据我了解,我们将 js 文件包含在父视图中,每次下拉列表更改时都应该点击它?还是我在这里遗漏了什么?

【问题讨论】:

【参考方案1】:

尝试对顶部的 javascript 函数使用不同的语法:

 
 $(document).on("change", "#docType", (function (e) 

  e.preventDefault();
  e.stopImmediatePropagation();

......

【讨论】:

似乎有效。原版没有的任何原因? 当我使用带有 ajax 的局部视图时,我总是使用这种语法。另一个也从来没有为我工作过。当您重新加载部分视图时,以前的事件绑定会丢失。所以你必须将事件绑定到文档。

以上是关于页面重新加载时未命中更改功能的主要内容,如果未能解决你的问题,请参考以下文章

DataTables.js - 表格在页面加载时未加载初始 100% 全宽

如何在页面重新加载超过 10 像素时激活颜色更改导航

如果在页面初始加载时未选中复选框,则返回无效提交

Facebook 如何在不重新加载页面或使用 # 或的情况下更改浏览器地址栏中的 URL?

重新加载页面,保持会话

如何在不重新加载页面的情况下更改页面 url