如何减少多个if语句的代码

时间:2017-09-03 07:15:20

标签: javascript jquery performance optimization

我正在尝试验证大型联系表单。当用户忘记所需的输入字段时,我用默认文本填充空变量。

我当前的解决方案使用了九个if语句。有没有更好的方法来使用更少的代码

  

html: <xehases class="" id="xehases"></xehases>

var onoma = $("#fname").val();
var eponimo = $("#lname").val();
var email = $("#email").val();
var diefthinsi = $("#address").val();
var poli = $("#city").val();
var xora = $("#country").val();
var katigoriaDiafimisis = $("#AdCategory").val();
var plano = $("#plan").val();
var istoselida = $("#website").val();
var epixirisi = $("#company").val();
var minima = $("#message").val();

var missing = '  ';

if (onoma === "") {
  missing += 'Όνομα ';
  $("xehases#xehases").html(missing);
} else {
  $("xehases#xehases").html(missing);
}

if (eponimo === "") {
  missing += 'Επώνυμο ';
  $("xehases#xehases").html(missing);
} else {
  $("xehases#xehases").html(missing);
}

if (email === "") {
  missing += 'email ';
  $("xehases#xehases").html(missing);
} else {
  $("xehases#xehases").html(missing);
}

if (poli === "") {
  missing += 'Πόλη ';
  $("xehases#xehases").html(missing);
} else {
  $("xehases#xehases").html(missing);
}

if (xora === "please choose a category") {
  missing += 'Χώρα ';
  $("xehases#xehases").html(missing);
} else {
  $("xehases#xehases").html(missing);
}

if (plano === "") {
  missing += 'Πλάνο ';
  $("xehases#xehases").html(missing);
} else {
  $("xehases#xehases").html(missing);
}

if (katigoriaDiafimisis === "") {
  missing += 'Κατηγορία Διαφήμισης ';
  $("xehases#xehases").html(missing);
} else {
  $("xehases#xehases").html(missing);
}

if (epixirisi === "") {
  missing += 'Επιχείρηση ';
  $("xehases#xehases").html(missing);
} else {
  $("xehases#xehases").html(missing);
}

if (minima === "") {
  missing += 'Μήνυμα ';
  $("xehases#xehases").html(missing);
} else {
  $("xehases#xehases").html(missing);
}

3 个答案:

答案 0 :(得分:12)

您可以创建一个包含表单字段的dict,以及缺少时显示的字符串,并遍历列表。此外,正如另一个响应所示,将缺少的错误消息设置为结束并仅执行一次;此外,如果您要在每种情况下执行相同的操作,则不需要if / else。编写类似这样的代码:

// key is form input, value is displayed in missing field message
const fieldsDict = {
    "fname": "Όνομα",
    "lname": "eponimo",
    // ...
};

let missing = "";

Object.keys(fieldsDict).forEach((field) => {
    if ($("#" + field).val() === "") {
        missing += fieldsDict[field] + " ";
    }
});

$("xehases#xehases").html(missing);

答案 1 :(得分:1)

我可以看到代码示例有一些重复

#include <stdio.h>

enum { MAXNM = 64, MAXLN = 512 };   /* max name & line constants */

int main (int argc, char **argv) {

    int id;
    char name[MAXNM] = "",
        line[MAXLN] = "",
        *p = line;          /* pointer to line to walk string */
    FILE *fp = argc > 1 ? fopen (argv[1], "r") : stdin;

    if (!fp) {  /* validate file open for reading */
        fprintf (stderr, "error: file open failed '%s'.\n", argv[1]);
        return 1;
    }

    while (fgets (line, sizeof line, fp))   /* read each line / validate */
    {
        int offset = 0;                     /* number of char processed  */
        while (sscanf (p, "%d,%63[^0-9]%n", &id, name, &offset) == 2) {
            printf ("%3d    %s\n", id, name);
            p += offset;                    /* advance to next id,name */
        }
    }

    if (fp != stdin) fclose (fp);     /* close file if not stdin */

    return 0;
}

这只能放在最后。因此,您只需要构建缺少变量的内容。

          $("xehases#xehases").html(missing);

答案 2 :(得分:0)

像这样......

var fields = ['fname', 'lname', 'email']; // ...and so on
var errField = $('#xehases');

function submit(){
    fields.forEach(function(field){
        var domElem = $('#' + field);
        if (domElem.val() === '') {
            errField.html(errField.text() + ' ' + domElem.attr('err-msg'));
        }
    });
}

&#39; ERR-MSG&#39;可能是用于丢失消息的输入元素的属性。