0

好的,是时候请来专家了:谁能告诉我如何让它正常工作?!

背景:我们有一个 PHP 网络表单,客户端有一个下拉字段,例如汽车类型,他们单击该下拉列表中的一个值,然后显示特定于该选择的字段集。客户端可能在所有部分都有必填字段,但当然并非所有字段集都始终显示,因此如果该字段没有 WxH,则意味着它当前未显示,因此忽略必填/验证字段标志,但如果 WxH > 0 ,停止进程,显示错误信息。

以下是假设发生的情况: json 收集所有标记为必需的字段:

[var fieldList = <?php echo "new Array(". trim(json_encode($reqFlds), '[]').")"; ?>;]

用户单击提交按钮,json数组传递给下面的函数,然后应该确定标记为必需的字段的宽度和高度是否> 0 如果> 0,则表示该字段当前正在屏幕上显示,因此在填写必填字段之前不应提交表单,应该出现消息。

使用 FB,我看到它通过循环一次,检查 isVisible(),转到“返回空白字段;” 并停止。 在此处输入图像描述

我将把它归结为星期五,不知道我是如何错过添加实际脚本的。现在我明白为什么没有人回应了:

function checkRequired(fieldList) {
    var field = null,
        blankFields = [],
        listText = [], listItem = [], fieldId = [], label = [];

    for (var i = 0; i < fieldList.length; i++) {
        listText = fieldList[i];
        listText = listText.substring(1, listText.length - 1);
        listItem = listText.split("||");
        fieldId = listItem[0];
        label = listItem[1];
        field = document.getElementById(fieldId);

        if (isVisible(field) && isBlank(field)) {
            blankFields.push(label);
        }
    return blankFields;
    }
function isVisible(field) {
    if (field.offsetWidth == 0 || field.offsetHeight == 0) return true;
}

function isBlank(field) {
    if ((field.type == "text" || field.type == "textarea") && field.value == "") return true;
    if (!(field.checked || field.selected || field.selectedIndex > -1)) return true;
    return false;
}

    if (blankFields.lentgh > 0 || blankFields.lentgh == 0) {
        displayError(blankFields);
        return false;
    } else {
        return true;
    }
}

function displayError(blankFields) {
    var Errmsg = "The must fill in the following fields in order to save your request:\n\n";
    for (var i = 0; i < blankFields.length; i++) {
        Errmsg += blankFields[i] + "\n";
                alert(Errmsg);
    }
}

任何帮助是极大的赞赏。

注意:它不会回到“blankdFields.push(lable);”的 if 语句 在它执行 isVisible 函数检查之后

4

1 回答 1

0

您的问题似乎是语法问题。

你有:

function checkRequired(fieldList) {
    var field = null,
        blankFields = [],
        listText = [], listItem = [], fieldId = [], label = [];

    for (var i = 0; i < fieldList.length; i++) {
        listText = fieldList[i];
        listText = listText.substring(1, listText.length - 1);
        listItem = listText.split("||");
        fieldId = listItem[0];
        label = listItem[1];
        field = document.getElementById(fieldId);

        if (isVisible(field) && isBlank(field)) {
            blankFields.push(label);
        }
    return blankFields;
    }

看起来好像缺少右括号;你有点搞砸了你的范围。return在语句之前添加一个右大括号。因为你没有这个大括号,所以函数在第一个循环之后中止,因为它遇到了return语句,这导致函数停止执行并返回blankFields

你想要的是这样的:

function checkRequired(fieldList) {
    var field = null,
        blankFields = [],
        listText = [], listItem = [], fieldId = [], label = [];

    for (var i = 0; i < fieldList.length; i++) {
        listText = fieldList[i];
        listText = listText.substring(1, listText.length - 1);
        listItem = listText.split("||");
        fieldId = listItem[0];
        label = listItem[1];
        field = document.getElementById(fieldId);

        if (isVisible(field) && isBlank(field)) {
            blankFields.push(label);
        }
    }

    return blankFields;
}

那应该可以解决眼前的问题。希望这可以帮助。

于 2013-01-18T21:39:58.463 回答