Livecycle javascript…压缩if语句

Livecycle javascript…压缩if语句,javascript,if-statement,livecycle,Javascript,If Statement,Livecycle,我正在制作一个有“验证”按钮的表单。此按钮的用途是检查并确保所有字段都已完成(这是项目要求的)。下面是检查字段是否为空的代码,然后更改边框颜色并显示文本框 if (form1.Main.sfRequestor.requestNameFirst.rawValue == null){ form1.Main.sfRequest.txtValidate.presence = "visible"; form1.Main.sfRequestor.requestNameFirst.border

我正在制作一个有“验证”按钮的表单。此按钮的用途是检查并确保所有字段都已完成(这是项目要求的)。下面是检查字段是否为空的代码,然后更改边框颜色并显示文本框

if (form1.Main.sfRequestor.requestNameFirst.rawValue == null){
    form1.Main.sfRequest.txtValidate.presence = "visible";
    form1.Main.sfRequestor.requestNameFirst.border.edge.color.value = "255,0,0"
} else {
    form1.Main.sfRequest.txtValidate.presence = "hidden";
    form1.Main.sfRequestor.requestNameFirst.border.edge.color.value = "255,255,255"
};

if (form1.Main.sfRequestor.requestNameLast.rawValue == null){
    form1.Main.sfRequest.txtValidate.presence = "visible";
    form1.Main.sfRequestor.requestNameLast.border.edge.color.value = "255,0,0"
} else {
    form1.Main.sfRequest.txtValidate.presence = "hidden";
    form1.Main.sfRequestor.requestNameLast.border.edge.color.value = "255,255,255"
};

在几个子窗体中有20多个字段需要检查。我试图整合代码,但不知如何整合。变量可以在Javascript中处理字段名吗

您可以轻松地将其转换为一个简单的函数:

 function validateField(element) {
     if (element.rawValue == null) {
        form1.Main.sfRequest.txtValidate.presence = "visible";
        element.border.edge.color.calue = "255,0,0";
     }
     else {
        form1.Main.sfRequest.txtValidate.presence = "hidden";
        element.border.edge.color.calue = "255,255,255";      
     }
 }
然后就这样称呼它:

validateField(form1.Main.sfRequestor.requestNameFirst);
validateField(form1.Main.sfRequestor.requestNameLast);
为了进一步简化,将所有20个元素放在一个数组和循环中

var elements = [form1.Main.sfRequestor.requestNameFirst, form1.Main.sfRequestor.requestNameLast, ...];
elements.forEach(function(element) {
    validateField(element);
});

您可以很容易地将其变成一个循环,并可以将其作为一个生命来编写,以保持名称空间的整洁

(function (arr) {
    var txtValidate = form1.Main.sfRequest.txtValidate,
        i, e;
    for (i = 0; i < arr.length; ++i) {
        e = form1.Main.sfRequestor[arr[i]]; // cache me
        if (e.rawValue == null){
            txtValidate.presence = "visible";
            e.border.edge.color.value = "255,0,0"
        } else {
            txtValidate.presence = "hidden";
            e.border.edge.color.value = "255,255,255"
        }
    }
}(['requestNameFirst', 'requestNameLast']));

一般表单的更新,假设
sfRequestor
sfRequest

(function (form, arr) {
    var txtValidateState = 'hidden',
        i, e;
    for (i = 0; i < arr.length; ++i) {
        e = form.sfRequestor[arr[i]];
        if (e.rawValue == null){
            txtValidateState = "visible";
            e.border.edge.color.value = "255,0,0";
        } else {
            e.border.edge.color.value = "255,255,255";
        }
    }
    form.sfRequest.txtValidate.presence = txtValidateState;
}(form1.Main, ['requestNameFirst', 'requestNameLast']));

form1
Main
sfRequestor
和其他变量是什么?使用括号表示法,您可以执行requestNameFirst[“rawValue”]您有什么类型的元素?它们都是文本框吗?大部分是文本框,但有日期、下拉列表、表格和单选按钮。哇,谢谢!我唯一看不到的是有多个子表单。也许你可以用一个简单的额外参数/arg来引用你想要的表单:)@silviak请查看编辑并让我知道你的表单是否不能以这种方式引用——如果你想多次运行此函数(针对不同的表单)你可能想现在就给它取个名字,我试着运行更新过的(第三个)代码块。我在另一个子窗体中添加了另一个字段,但该字段不起作用。我是javascript新手,我正在尝试阅读您的代码以理解它,但我找不到子表单的位置listed@silviak它一次编写一个表单,最后一行是表单,然后是
sfRequestor
中的项目名称。如果要执行多个表单,请将其从IIFE更改为命名函数,然后为每个表单调用一次。如果这没有进一步的帮助,请给出一个不同表单的示例,这样我就可以看到代码需要如何修改。
(function (form, arr) {
    var txtValidateState = 'hidden',
        i, e;
    for (i = 0; i < arr.length; ++i) {
        e = form.sfRequestor[arr[i]];
        if (e.rawValue == null){
            txtValidateState = "visible";
            e.border.edge.color.value = "255,0,0";
        } else {
            e.border.edge.color.value = "255,255,255";
        }
    }
    form.sfRequest.txtValidate.presence = txtValidateState;
}(form1.Main, ['requestNameFirst', 'requestNameLast']));
(function () { // moved IIFE to protect namespace
    function validate(form, subform, arr) { // now named, new param subform
        var txtValidateState = 'hidden',
            i, e;
        for (i = 0; i < arr.length; ++i) {
            e = form[subform][arr[i]]; // select from subform
            if (e.rawValue == null){
                txtValidateState = "visible";
                e.border.edge.color.value = "255,0,0";
            } else {
                e.border.edge.color.value = "255,255,255";
            }
        }
        form.sfRequest.txtValidate.presence = txtValidateState; // assuming stays same
    }
    validate(form1.Main, 'sfRequestor', ['requestNameFirst', 'requestNameLast']);
    validate(form1.Main, 'sfClientInfo', ['firstname']);
    // if you have many here you can re-write as a loop again
}());