Javascript 为什么我的elseif语句每次都在运行

Javascript 为什么我的elseif语句每次都在运行,javascript,php,if-statement,Javascript,Php,If Statement,我正在用JavaScript构建一个表单发送函数,遇到了一个问题,每次它都执行一个else-if语句。这是我的剧本: this.submit = function() { var url = this.url + "?"; for(el in this.elements) { var e = $(this.elements[el]); var n = this.names[el]; if(n === "submit")

我正在用JavaScript构建一个表单发送函数,遇到了一个问题,每次它都执行一个else-if语句。这是我的剧本:

this.submit = function() {
    var url = this.url + "?";
    for(el in this.elements) {
        var e = $(this.elements[el]);
        var n = this.names[el];
        if(n === "submit")
        {
            window.alert("submit");
        }
        else
        {
        url += n + "=";
        }
        if(el == "#dropdown")
        {
            var options = e.children();
            for(var i = 0; i < options.length; i++) {
                var option = $('#' + options[i].id);
                if(option.attr('selected'))
                {
                    url += option.attr('name');
                    url += "&";
                    window.alert("dropdown worked");
                    break;
                }
            }
        }
        else if(el != "#submit") {
            url += e.attr('value');
            url += "&";
            window.alert("input worked");
        }
    }
    window.location.href = url;
};
表单构造函数:

function form(id) {
this.id = "#" + id;
this.url = window.location.href;
this.elements = [];
this.names = [];
this.setElements = function() {
    var elements = [],names = [],children = $(this.id).children();
    for(var i = 0; i < children.length; i++) {
        var childid = children[i].id;
        if(childid)
        {
            elements.push('#' + childid);
        }
    }
    this.elements = elements;
    for(var e in this.elements) {
        names.push($(this.elements[e]).attr('name'));
    }
    this.names = names;
};
this.logElements = function() {
    for(var e in this.elements) {
        console.log(this.elements[e]);
    }
    for(var n in this.names) {
        console.log(this.names[n]);
    }
};
this.submit = function() {
    var url = this.url + "?";
    for(el in this.elements) {
        var e = $(this.elements[el]);
        var n = this.names[el];
        if(n === "submit")
        {
            window.alert("submit");
        }
        else
        {
        url += n + "=";
        }
        if(el == "#dropdown")
        {
            var options = e.children();
            for(var i = 0; i < options.length; i++) {
                var option = $('#' + options[i].id);
                if(option.attr('selected'))
                {
                    url += option.attr('name');
                    url += "&";
                    window.alert("dropdown worked");
                    break;
                }
            }
        }
        else if(el != "#submit") {
            url += e.attr('value');
            url += "&";
            window.alert("input worked");
        }
    }
    window.location.href = url;
};
}

for…in循环是原因。el TK值为0、1、2…您需要比较此值。元素[el]而不是el:


用一些代码把我的评论变成答案。Javascript中的in运算符迭代属性,而不是每个索引处的元素。要使当前代码正常工作,请将代码更改为以下内容:

var el;
var elementCount = this.elements.length;
for (var i = 0; i < elementCount; i++) {
    el = this.elements[i];

这将产生预期的行为。

您检查过el实际上是什么吗?使用console.login操作符在索引处迭代属性,而不是数组元素。他循环中前面的代码希望接收字符串值,无论哪种方式,很明显他使用in操作符的方式不是他想要的。
if(this.elements[el] == "#dropdown") ... 
else if(this.elements[el] != "#submit") {

...
var el;
var elementCount = this.elements.length;
for (var i = 0; i < elementCount; i++) {
    el = this.elements[i];