c# - javascript 函数没有被调用

标签 c# javascript jquery .net

我在面板中有一个下拉列表和一个文件上传控件,该控件与 UpdatePanel 中的其他控件一起添加。从下拉列表中选择一个值并上传文件后,将启用“上传”按钮。为此,我有一个 JavaScript 函数,如下所示:

function SetUploadButtonEnabled(controlPanel, fileUploadId) {
     var docTypesList = controlPanel.find("select");
     var gotListVal = docTypesList.val() != "";
     var fileUpload = $find(fileUploadId);
     var gotFileVal = fileUpload.getUploadedFiles().length > 0;
     var enable = gotListVal && gotFileVal;
     if (enable) {
         controlPanel.find(".GxButtonBlue").removeAttr("disabled");
     }
     else {
         controlPanel.find(".GxButtonBlue").attr("disabled", true);
     }
 }

我尝试从代码后面调用它,如下所示,但该函数没有被调用:

string script = "<script type=\"text/javascript\">"
                + "\n  $(document).ready(function (){"
                    + "\n    $(document).on(\"change\", \"#" + this._DdDocumentTypes.ClientID + "\", function(event){"
                    + "\n      var docUploadControlPanel = $(this).closest(\"#" + this._DocUploadControlPanel.ClientID + "\");"
                    + "\n      SetUploadButtonEnabled(docUploadControlPanel, \"" + this._fiInput.ClientID + "\");"
                    + "\n    });"
                    + "\n  });"
                    + "\n "
                    + "</script>";

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "DocumentAjaxUploadCtrlScript_" + this.ClientID, script);

由于有更新面板,我什至尝试过:

  ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "DocumentAjaxUploadCtrlScript_" + this.ClientID, script, true);

请帮我找出为什么该函数从未被调用!

最佳答案

这是一种方法。这里的关键是 pageComponents 对象。

ASPX 或用户控件

<script>
var pageComponents = {
    documentTypeSelector: "#<%= _DdDocumentTypes.ClientID %>",
    uploadControlSelector: "#<%= _DocUploadControlPanel.ClientID %>",
    fiInputSelector: "#<%= _fiInput.ClientID %>"
};
</script>

JavaScript 放置在上面之后

function SetUploadButtonEnabled(controlPanel, fileUploadId) {
     var docTypesList = controlPanel.find("select");
     var gotListVal = docTypesList.val() != "";
     var fileUpload = $find(fileUploadId);
     var gotFileVal = fileUpload.getUploadedFiles().length > 0;
     var enable = gotListVal && gotFileVal;
     if (enable) {
         controlPanel.find(".GxButtonBlue").removeAttr("disabled");
     }
     else {
         controlPanel.find(".GxButtonBlue").attr("disabled", true);
     }
 }

$(document).ready(function (){
    $(document).on("change", pageComponents.documentTypeSelector, function(event){
        var docUploadControlPanel = $(this).closest(pageComponents.uploadControlSelector);
        SetUploadButtonEnabled(docUploadControlPanel, pageComponents.fiInputSelector);
    });
});

备注

您可以通过将控件 ClientIDMode 属性设置为 Static 来避免使用上面的“bee sting”语法(假设您仅使用 ASP.NET 页面,而不是用户控件。那么您的 JavaScript 将如下所示:

$(document).ready(function (){
    $(document).on("change", "#documentType", function(event){
        var docUploadControlPanel = $(this).closest("#uploadControl");
        SetUploadButtonEnabled(docUploadControlPanel, "#fiInput");
    });
});

另外一行:

var docUploadControlPanel = $(this).closest(pageComponents.uploadControlSelector);

可以写成:

var docUploadControlPanel = $(pageComponents.uploadControlSelector);

因为 ClientID 始终返回整个页面的唯一元素 ID。

关于c# - javascript 函数没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24023685/

相关文章:

c# - 正则表达式允许数字、破折号、逗号

c# - 在运行时创建/修改枚举

c# - 如何将工作编码到单线程 C#

c# - 如何使用 C# mongo 驱动程序达到与 python 中的 PyMongo 相同的性能?

javascript - 如何使用普通 javascript 将用户输入从单个表单传输到不同 div 中的不同文本区域 - 没有 jquery?

jquery - 调整主图像大小后,jcrop 演示不再起作用(已更新图片)

javascript - 如何更改我的 Controller 以使其与我的 View 充分分离?

javascript - JWT解码返回null

jquery - 尝试克隆没有数据的 html 下拉列表(tbody)

javascript - Bootstrap 模式切成两半