2013-03-18 35 views
0

我有一个表单,我将其设置为测验。最终我会改变它来计算一次完成测验的最终分数。但我被困在这一部分。如果选中了正确的方框,我想添加一个点,如果选中了错误的方框,则减去一个点。javascript - 在循环中测试自定义属性

代码正确答案:

<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

+0

你的jsfiddle无法工作。请先修复它。 – pktangyue 2013-03-18 04:01:01

+0

您的用户缺乏足够的经验,无法在HTML中找到答案=“true”? – zerkms 2013-03-18 04:04:16

+0

自定义属性无效,如果您要使用HTML5和data- *属性中的任何属性。尽管对其他文档类型无效,但仍然是最好的选择。 – rlemon 2013-03-18 04:04:24

回答

2

尝试ŧ他的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,以便只检查复选框。

+0

几乎在那里--OP想要在匹配true的复选框上增加分数,并在与false匹配的复选框上递减。这个解决方案不会那样做。 – 2013-03-18 04:28:20

+0

@BrianRogers你是对的。我的答案已更新。 – 2013-03-18 04:32:59

+0

+1感谢您的修复。 – 2013-03-18 04:45:25