0

さて、専門家に電話する時間です:これを正しく機能させる方法を誰かに教えてもらえますか?!

背景:PHP Webフォームがあり、クライアントには車の種類などのドロップダウンフィールドがあり、そのドロップダウンの値をクリックすると、その選択に固有のフィールドセットが表示されます。クライアントはすべてのセクションに必須フィールドを持つことができますが、もちろんすべてのフィールドセットが常に表示されるわけではないため、フィールドにWxHがない場合、つまり現在表示されていない場合は、必須/検証フィールドフラグを無視しますが、WxH>0の場合、プロセスを停止し、エラーメッセージを表示します。

発生すると思われることは次のとおりです 。jsonは、必要に応じてフラグが付けられたすべてのフィールドを収集します。

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

ユーザーが送信ボタンをクリックすると、json配列に以下の関数が渡されます。これにより、必須としてマークされたフィールドの幅と高さが> 0であるかどうかを判断する必要があります。これは、フィールドが現在画面に表示されていることを意味します。必須フィールドに入力するまでフォームを送信しないでください。メッセージが表示されます。

FBを使用すると、ループを1回通過し、isVisible()をチェックし、「returnblankFields;」に移動することがわかります。そして停止します。 ここに画像の説明を入力してください

私はこれを金曜日になるまでチョークで書きますが、実際のスクリプトを追加するのをどのように逃したのかわかりません。これで、誰も応答しなかった理由がわかります。

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 に答える