【问题标题】:javascript - testing against custom attributes in loopjavascript - 在循环中测试自定义属性
【发布时间】:2013-03-18 03:57:39
【问题描述】:

我有一个表格,我设置为测验。最终,我将更改它以计算完成后的测验的最终分数。但我被困在这一部分上。如果选中了正确的框,我想加一个点,如果选中一个错误的框,我想减去一个点。

正确答案的代码:

<input type="checkbox" name="q3" id="q1javascript" answer="true">

错误答案代码:

<input type="checkbox" name="q3" id="q3xhtml" answer="false">

Javascript 检查它:

function test() {
    var boxes = document.getElementsbyName('q3');
    var score = 0;
    var i = 0;
    while (i < 4) {
        var answer = boxes[i].getAttribute('answer');
        if (answer === 'true') {
            score++;
        }
        else {
            score--;
        }
        i++;
    }
    alert(score);
}

JSFiddle

【问题讨论】:

  • 你的 jsfiddle 不能工作。请先修复它。
  • 您的用户是否缺乏经验,无法在 HTML 中发现 answer="true"
  • 自定义属性无效,如果你要使用任何东西,它会是 HTML5 和 data-* 属性。尽管对其他文档类型无效,但它仍然是最好的方法。
  • 您是否真的想在 html 本身中保留一个属性来说明选项是什么。用户可以很容易地查看 html 源代码以找到问题的答案。 :) 也许你应该考虑一下。

标签: javascript html custom-attributes


【解决方案1】:

试试这个 JSFiddle:http://jsfiddle.net/vCz2T/1/

复选框现在使用data-answer="true"data-answer="false"。任何像 answer 属性这样的自定义数据都应该以 data- 为前缀:

<input type="checkbox" name="q3" id="q3css" data-answer="true">

test() 函数已更改为:

function test() {
    var boxes = document.getElementsByName('q3');
    var score = 0;
    var i, box, answer;
    for (i = 0; i < boxes.length; i++) {
        box = boxes[i];
        if (box.checked) {
            answer = box.getAttribute('data-answer');
            if (answer === 'true') {
                score++;
            } else {
                score--;
            }
        }
    }
    alert(score);
}

你现在必须做getAttribute('data-answer')。此外,您应该检查box.checked,以便只计算选中的复选框。

【讨论】:

  • 差不多了——OP希望在匹配true的复选框上增加分数,并在匹配false的复选框上减少分数。此解决方案不这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2011-10-27
  • 2017-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多