Javascript 为什么我的elseif语句每次都在运行
我正在用JavaScript构建一个表单发送函数,遇到了一个问题,每次它都执行一个else-if语句。这是我的剧本: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")
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];