簡體   English   中英

javascript函數未調用

[英]javascript function not being called

我在面板中有一個下拉列表和一個fileupload控件,該控件與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 Page,而不是用戶控件。那么您的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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM