【问题标题】:PDF JavaScript: Function with a loopPDF JavaScript:带循环的函数
【发布时间】:2016-06-25 23:31:40
【问题描述】:

谁能告诉我下面的代码有什么问题?我正在尝试使用循环创建函数,用于根据用户选择在 PDF 文档中隐藏和制作可见标签。

我的原始代码:

if ((type == "sugar") && (countryofgrowth == "United State"))
{
       getField("sugarlabel").display=display.visible;
       getField("goodsugar").display=display.hidden;
       getField("sugarQualitylevellow").display=display.hidden;
       getField("sugarQualitylevelhigh").display=display.hidden;
       getField("sugarQualitylevelhighmorethan75").display=display.hidden;
       getField("sugarQualitylevelhighlessthan75").display=display.hidden;
       getField("cornquantity").display=display.hidden;
       getField("cornquantitymorethan500").display=display.hidden;
       getField("cornquantitymax").display=display.hidden;
       getField("cornquantitymaxyes").display=display.hidden;
       getField("cornquantitymaxno").display=display.hidden;
}
else if ((type == "sugar") && (countryofgrowth == "United Kingdom"))
{
       getField("sugarlabel").display=display.hidden;
       getField("sugarquality").display=display.visible;
       getField("sugarQualitylevellow").display=display.hidden;
       getField("sugarQualitylevelhigh").display=display.hidden;
       getField("sugarQualitylevelhighmorethan75").display=display.hidden;
       getField("sugarQualitylevelhighlessthan75").display=display.hidden;   
       getField("cornquantity").display=display.hidden;
       getField("cornquantitymorethan500").display=display.hidden;
       getField("cornquantitymax").display=display.hidden;
       getField("cornquantitymaxyes").display=display.hidden;
       getField("cornquantitymaxno").display=display.hidden;          
 }

带循环的函数:

var setDisplay = function(display){
		var fields = ["sugarlabel", "goodsugar", "sugarQualitylevellow" /*,...*/];
    for(var i=0; i< fields.length; i++){
    		if(fields[i] == display) {
	        	getField(fields[i]).display=display.visible;
        } else {
        		getField(fields[i]).display=display.hidden;
        }
    }
}
if ((type == "sugar") && (countryofgrowth == "United State"))
{ 
setDisplay("sugarlabel")
}

我不断收到错误消息:'RangeError: Invalid argument value.

非常感谢任何帮助

【问题讨论】:

    标签: javascript function loops pdf


    【解决方案1】:

    错误信息指向哪一行?

    使用也是对象属性的变量名不是很聪明。因此,我建议使用其他变量而不是变量“display”。

    最好定义一个独立于任何变量的函数,因为它可能经常使用,作为文档级脚本。该函数可能如下所示:

    function setDisplay(item)
    {
            var fields = ["sugarlabel", "goodsugar", "sugarQualitylevellow" /*,...*/];
        for(var i=0; i< fields.length; i++){
                if(fields[i] == item) {
                    this.getField(fields[i]).display=display.visible;
            } else {
                    getField(fields[i]).display=display.hidden;
            }
        }
    }
    

    当您调用它时,您可以照常进行(尽管再次使用“type”作为变量名是次优的。

    另一方面,我不明白为什么函数会比直接命令带来优势。通过使用一些智能的分层字段命名,您可能会获得更多收益,这将允许隐藏所有相关字段,然后显示您需要的内容。

    【讨论】:

    • 非常感谢,这解决了我的错误,但是,它不能完全工作,因为我不认为在同一阶段我需要能够显示多个标签,并且只需要上面的代码显示其中之一。能否请您发布有关“智能分层字段命名”的想法示例,我会去看看它是否适合我
    • “智能分层字段命名”... smart 代表“经过深思熟虑”,与软件无关。 PDF中的“分层字段命名”是使用句点“。”对字段名称进行分组。作为分隔符,例如在“name.first”、“name.middle”、“name.last”中。对于某些属性,您可以通过 this.getField("name") 访问组,例如,在一个命令中隐藏整个组。
    • 谢谢马克斯。您能否建议我如何修改我的函数,使其返回多个值,即如果我想显示 'setDisplay("sugarlabel")' & 'setDisplay("goodsugar")'?当前,无论我设置显示多少字段,它都只返回一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 2014-11-27
    • 2012-01-12
    • 2016-02-04
    • 1970-01-01
    • 2012-09-10
    • 2014-04-30
    相关资源
    最近更新 更多