JavaScript: у меня есть массив. Я хочу проверить, является ли первый элемент fieldset - PullRequest
1 голос
/ 23 октября 2010

ОК, вот моя первоначальная проблема. Вам не нужно читать его, но в случае, если это поможет: Firefox считает

элементом формы; Хром не

По сути, Firefox и IE считают набор полей в моем HTML как элемент в моем массиве, и это все испортило. Но Google Chrome не считает fieldset как элемент массива. Я пытаюсь решить проблему, устанавливая новый массив одним способом, если браузер считает набор полей, и устанавливая его другим способом, если он это делает. Вот мой код Я думаю, что проблема с утверждением 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]);
}

1 Ответ

0 голосов
/ 23 октября 2010

Проблема, с которой вы столкнулись, в основном потому, что nodeName обычно возвращает прописные буквы текст (в зависимости от браузера), и вы сравниваете его со строчными буквами fieldset. Чтобы сделать это согласованным, вы должны использовать строковую функцию toLowerCase.

Об условных обозначениях: я думаю, что более элегантный способ - создать новый массив filtered без <fieldset> и кнопку подтверждения.

Наконец, то, как вы создаете свои массивы, включает в себя слишком много печатания.

Я предлагаю вам использовать буквенную запись для создания Arrays и Objects.

[ Демо ] ( просмотр клика )

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...