简体   繁体   English

javascript函数未调用

[英]javascript function not being called

I have a dropdownlist and a fileupload control in a panel which is added with other controls in an UpdatePanel. 我在面板中有一个下拉列表和一个fileupload控件,该控件与UpdatePanel中的其他控件一起添加。 When a value is selected from the dropdown and a file is uploaded, the Upload button is enabled. 从下拉列表中选择一个值并上传文件后,将启用“上传”按钮。 For this I have a javascript function as follows: 为此,我有一个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);
     }
 }

I am trying to call it from code behind as follows, but the function is not being called: 我正在尝试从下面的代码中调用它,但是未调用该函数:

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);

Since an Update Panel is there I even tried: 由于那里有一个更新面板,我什至尝试了:

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

Please help me find why the function is never called! 请帮助我找出为什么永远不调用该函数!

Here's one way to do it. 这是一种方法。 The key here is the pageComponents object. 这里的关键是pageComponents对象。

ASPX or User Control ASPX或用户控件

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

JavaScript Place after the above 上述 的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);
    });
});

Remarks 备注

You can avoid using the "bee sting" syntax above by setting the control ClientIDMode property to Static (assuming you're using only ASP.NET Page, not a user control. Then your JavaScript would look like below: 您可以通过将控件的ClientIDMode属性设置为Static来避免使用上面的“ bee sting”语法(假设您仅使用ASP.NET Page,而不是用户控件。那么您的JavaScript如下所示:

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

In addition the line: 另外一行:

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

could be written as: 可以写成:

var docUploadControlPanel = $(pageComponents.uploadControlSelector);

since ClientID always returns a unique element ID for the entire page. 因为ClientID总是返回整个页面的唯一元素ID。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM