JavaScript:我有一个数组。我想检查第一个元素是否是字段集

标签 javascript html firefox dom google-chrome

好的,这就是我最初的问题。您不必阅读它,但以防万一它有帮助:Firefox thinks <fieldset> is a form element; Chrome doesn't

基本上,Firefox 和 IE 将 HTML 中的字段集算作数组中的一个元素,这一切都搞砸了。但 Google Chrome 不会将字段集算作数组元素。我试图通过以下方式解决问题:如果浏览器对字段集进行计数,则以一种方式设置新数组,如果是,则以不同的方式设置它。这是我的代码。我认为问题出在 if 语句上。

var $ = function (id) { return document.getElementById(id); }

function check() {
var x = $("myForm");

var user = new Array();
var type = x.elements[0].type;
    if (x.elements[0].nodeName=="fieldset") {
    user[0] = x.elements[1].value;
    user[1] = x.elements[3].value;
    user[2] = x.elements[5].value;
    user[3] = x.elements[2].value;
    user[4] = x.elements[4].value;
    user[5] = x.elements[6].value;
} else {
    user[0] = x.elements[0].value;
    user[1] = x.elements[2].value;
    user[2] = x.elements[4].value;
    user[3] = x.elements[1].value;
    user[4] = x.elements[3].value;
    user[5] = x.elements[5].value;
}

var answers = new Array();
answers[0] = "sample1";
answers[1] = "sample2";
answers[2] = "sample3";
answers[3] = "sample4";
answers[4] = "sample5";
answers[5] = "sample6";

var display = new Array();
for (var i=0;i<6;i++) {
    if (user[i] == "") {
        display[i] = "You entered nothing.";
        }
    else if (user[i] == answers[i]) {
        display[i] = "Correct!";
        }
    else {
        display[i] = "Wrong. The correct answer is \"" + answers[i] + "\".";
        }
    }
alert(display[0] + "\n" + display[1] + "\n" + display[2] + "\n" + display[3] + "\n" + display[4] + "\n" + display[5]);
}

最佳答案

您遇到的问题主要是因为nodeName 通常返回大写文本(取决于浏览器),并且您将其与小写 fieldset 进行比较。为了使其一致,您应该使用字符串的 toLowerCase功能。

关于条件:我认为更优雅的方式是创建一个新的 filtered没有 <fieldset> 的数组和提交按钮。

最后,创建数组的方式涉及太多的输入。

我建议您使用 literal notation 用于创建 ArraysObjects .

[ Demo ](点击预览)

function $(id) { return document.getElementById(id); }

var filtered = [];
var elements = $("myForm").elements;
var len = elements.length;

// opt out fieldsets and submit buttons
for (var i = 0; i < len; i++) {
  var el = elements[i];
  if (el.nodeName.toLowerCase() != "fieldset" && el.type != "submit") {
    filtered.push(el);
  }
}

// specify an order (of indices)
var user = [1, 3, 5, 2, 4, 6];

// then replace numbers with element 
// values  from the filtered array
for (var i = 0; i < user.length; i++) {
  user[i] = filtered[ user[i] ].value;
}

关于JavaScript:我有一个数组。我想检查第一个元素是否是字段集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4002501/

相关文章:

javascript - Firefox 15 中的 ajaking onbeforeunload

javascript - $.ajax() 没有在 mozilla firefox 中向服务器端触发请求

javascript - hasOwnProperty HTMLElement 火狐

javascript - 创建一个点击网页时弹出的区域

html - 如何将一张图片放在另一张图片之上?

css - 如何在左浮动 <figure> 的右侧换行一段

javascript - 如何在文本区域处于事件使用状态时从其上移除焦点

javascript - 如何将正则表达式的三种模式组合在一起?

javascript - 不要在点击链接时发送 GET 请求

javascript - NodeJS 与 MongoDB - 实例化 "db"变量的最佳实践