从另一个函数调用javascript函数不起作用

时间:2017-08-04 06:14:46

标签: javascript jquery

我想在另一个函数中定义的函数中使用JsonObject值,所以我在下面使用它。

function downloadPDF(e) {
setImagesUploadedFile(objValue); // another function
var obj = objValue[0].Filename;
var filePath = SharedFilePath + obj;
$('#ImgSignedDoc').attr('href', filePath);}

这个函数setImagesUploadedFile(objValue);就像这样

function setImagesUploadedFile(JsonObject) {
for (i = 0; i < JsonObject.length; i++) {
    var obj = JsonObject[i].Filename;
    var obj2 = "ImgSignedDoc";
    var obj3 = JsonObject[i].FileType;
    var datafileName = JsonObject[0].ImageName;

    var ImgObj = parent.document.getElementById(obj2);
    var Filename = datafileName.substring(datafileName.lastIndexOf('//') + 1);
    ImgObj.innerText = Filename;
    $(ImgObj).attr("data-filename", Filename);
}

}

,它显示的错误是

  

0x800a1391 - JavaScript运行时错误:&#39; objValue&#39;未定义

那么我应该怎么做或改变才能在我的另一个函数中得到setImagesUploadedFile(objValue)的参数?

3 个答案:

答案 0 :(得分:1)

问题出在您开始之前:objValue永远不会被声明和填充。

function downloadPDF(e) {
    // At this point objValue is undefined
    setImagesUploadedFile(objValue); // another function

    var obj = objValue[0].Filename;
    var filePath = SharedFilePath + obj;
    $('#ImgSignedDoc').attr('href', filePath);
}

尝试使用'use strict'声明来更好地处理错误,因为它会导致未声明的变量引用出错,而不是在使用它时。

我认为您正在尝试将objValue视为参考 - 适用于编辑但不适用于实例化(JS没有out参数),因此请改用return:

function downloadPDF(e) {
    'use strict';
    var json = // However you get your JSON data...
    var objValue = setImagesUploadedFile(json); 
    ...

然后,在setImagesUploadedFile

function setImagesUploadedFile(jsonObject) {
    'use strict';
    var result = [];
    if(jsonObject) // Check we were passed the object
        for (var i = 0; i < jsonObject.length; i++) {
            ...
            var imgObj = ...

            // Add the result to the expected output array
            result.push(imgObj);
        }

    // Return the output array
    return result; 
}

所以,要解决这个问题的步骤:

  • 添加'use strict';以获得更好的错误。
  • 在使用变量之前声明变量。
  • 使用函数中的return来获取值。

最后,作为旁注,JS中的一个约定是将camelCase用于函数和变量,并且只将CapitalCase用于期望用new调用的类和函数。您不必使用它,但它可以帮助您更轻松地理解代码。

答案 1 :(得分:0)

function downloadPDF(e) {
    // objValue is not declared, is this a global variable, if yes then declare it before calling the downloadPDF function.
    setImagesUploadedFile(objValue); // another function
    var obj = objValue[0].Filename;
    var filePath = SharedFilePath + obj;
    $('#ImgSignedDoc').attr('href', filePath);
}

var objValue = [];
downloadPDF(e);

或者您可以从您想要的位置获取objValue的值:

var objValue = $("#id or class");
downloadPDF(e);

答案 2 :(得分:0)

在传入函数之前,您需要定义objValue。 例如:

function downloadPDF(e)
{ 
    var objValue = {key1: value, key2: value};
    setImagesUploadedFile(objValue); // another function var obj = 
    objValue[0].Filename; var filePath = SharedFilePath + obj; 
    $('#ImgSignedDoc').attr('href', filePath);
}