Javascript:验证脚本无法正常工作

时间:2013-01-18 17:17:17

标签: php javascript validation

好的,是时候打电话给专家了:有谁能告诉我如何正常工作?!

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

这是假设发生的事情: json根据需要收集标记的所有字段:

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

用户点击提交按钮 json数组传递下面的函数,然后应该确定标记为required的字段的宽度和高度是否> 0 if> 0表示该字段当前正在屏幕上显示,因此在填写所需字段之前不应提交表单,应显示msgs。

使用FB,我看到它经历了一次循环,检查isVisible(),转到“return blankFields;”并停止。 enter image description here

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

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功能检查后

1 个答案:

答案 0 :(得分: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;
}

那应该解决眼前的问题。希望这会有所帮助。