复杂的javascript逻辑

复杂的javascript逻辑,javascript,Javascript,我想问一些棘手的javascript,这是关于if/else if/else的问题。 我想问“是”或“否”,这是逻辑:如果问题1是“是”,问题2是“是”,问题3是“否”,结果是“好”,如果问题1是“是”,问题2是“否”,问题3是“是”,结果是“不好”。我为这个案例编写了代码,但没有正常工作,这是我的代码,我使用html中的复选框选择答案: javascript <script type="text/javascript"> var question1 = document.getE

我想问一些棘手的javascript,这是关于if/else if/else的问题。 我想问“是”或“否”,这是逻辑:如果问题1是“是”,问题2是“是”,问题3是“否”,结果是“好”,如果问题1是“是”,问题2是“否”,问题3是“是”,结果是“不好”。我为这个案例编写了代码,但没有正常工作,这是我的代码,我使用html中的复选框选择答案:

javascript

<script type="text/javascript">

var question1 = document.getElementById("a");
    question2 = document.getElementById("b");
    question3 = document.getElementById("c");
    answer1 = document.getElementById("d");
    answer2 = document.getElementById("e");
    answer3 = document.getElementById("f");
    answer4 = document.getElementById("g");
    answer5 = document.getElementById("h");
    answer6 = document.getElementById("i");




function TheResult(form){
    if(question1 == answer1 && question2 == answer3 && question3 == answer6 ){
        document.write('good');
    }else if(question1 == answer1 && question2 == answer4 && question3 == answer5  ){
        document.write('not good');
    }else {
        document.write('ERROR');
    }
}

var question1=document.getElementById(“a”);
问题2=document.getElementById(“b”);
问题3=document.getElementById(“c”);
answer1=document.getElementById(“d”);
answer2=document.getElementById(“e”);
answer3=document.getElementById(“f”);
answer4=document.getElementById(“g”);
answer5=document.getElementById(“h”);
answer6=document.getElementById(“i”);
功能结果(表格){
如果(问题1==回答1和问题2==回答3和问题3==回答6){
文件。填写(“良好”);
}否则如果(问题1==回答1和问题2==回答4和问题3==回答5){
文件。写(“不好”);
}否则{
文件。写入(“错误”);
}
}
html


问题1

对 否

问题2

对 否

问题3

对 否


我的代码在任何情况下都会打印“好”,请帮助

尝试在每种情况下使用此选项:

var question1 = document.getElementById("a").innerHTML;
var answer1 = document.getElementById("d").innerHTML;

if(question1 == answer1 ){
    document.write('good');
}

从简单开始,然后建立起来。

实际上,我对你提出的逻辑感到相当困惑。正如许多人指出的那样,您正在尝试将元素相互比较。这不会给你想要的结果。您需要根据元素类型使用
.innerHTML
.value

我看到的下一个问题是,HTML结构、问题和答案之间没有任何关联

我看到的另一个问题是在声明JS变量时出现的。您正在尝试链接您的声明,这很好。虽然您需要使用
而不是
应仅位于最后一个要声明的代码上

我想这些问题大部分都是因为你给了我们一些示例代码。我希望您的真实代码不是这样的,否则您的问题中会出现其他问题

不管怎样,我有一个解决办法给你。我以一种对我更有意义的方式重写了它:

HTML:


问题1
对
不


问题2 对 不

问题3 对 不

我做了两个改变。我去掉了
元素,取而代之的是
。然后我将复选框改为单选按钮

JS

function theResult(){
    var inputs = document.getElementsByTagName('input');
    var question = [ {selected: '', expected: 'YES'},
                     {selected: '', expected: 'YES'},
                     {selected: '', expected: 'NO'}
                   ];
    var tmpSelected = [];

    for(var i = 0; i < inputs.length; i++){
        var tmp = inputs[i];
        if(tmp.type == 'radio' && tmp.checked){
            tmpSelected.push(tmp.value);
        }
    }
    for(var i = 0; i < tmpSelected.length; i++){
        question[i].selected = tmpSelected[i];
    }

    validateResults(question);
};

function validateResults(results){
    var status = '';
    for(var i = 0; i < results.length; i++){
        if(results[i].selected != results[i].expected){
            status = 'Not Good'
            break;
        } else {
            status = 'Good';
        }
    }
    console.log(status);
    return status;
}
函数theResult(){
var inputs=document.getElementsByTagName('input');
var question=[{所选:'',应为:'YES'},
{所选:'',应为:'是'},
{所选:'',应为:'否'}
];
var tmpSelected=[];
对于(变量i=0;i
正如你所看到的,我对这个做了很多修改。我想在所选答案和预期答案之间做出更好的映射

  • 然后我们浏览并获取页面上的所有输入。在第一个循环中,我们确保只接受
    单选按钮
    &只查看已选中的按钮。我们把它们塞进一个数组
    tmpSelected
  • 然后我们将
    tmpSelected
    的值分配给我们的
    question
    对象,特别是分配给
    .selected
    。这将便于与预期答案进行比较
  • 然后我们将调用一个不同的函数来验证结果(这个逻辑可以保留在前一个函数中,我只是喜欢把东西拆分一下,使它们更模块化)
  • validateResults()
    simple将
    所选的
    进行比较。预期的
    。如果它们不匹配,我们将
    中断
    循环并返回
    状态
    “不好”
    。否则我们会继续评估。我这样做是因为您的代码似乎只是返回一条成功/失败类型的消息,而不一定说哪些答案不正确

结果正确记录到控制台。因此,您只需将其更改回您的
文档。write()

您正在比较元素???比较元素。。。呵呵!应该是
question2.值。。。那么,继续……
…您希望
问题1==answer1
做什么?我想您可能在寻找
。值
…您是在比较元素,而不是它们的值。无论如何,问题1(例如)除了作为一个对象之外没有其他价值。除了,给定他的HTML,这些也不会相等。啊!对也许重新开始,让事情变得简单。需要获得以下等价项:
var x1=document.getElementById(“myCheck”)。selectedIndex;var y=document.getElementById(“myCheck”)。选项警报(“索引:+y[x1]。索引+”是“+y[x1]。文本);
<form>
    <label for="a1" id="a">Question 1</label>
    <input type="radio" name="a1" value="YES" id="d">YES
    <input type="radio" name="a1" value="NO" id="e">NO
    <br>
    <br>
    <label for="a2" id="b">Question 2</label>
    <input type="radio" name="a2" value="YES" id="f">YES
    <input type="radio" name="a2" value="NO" id="g">NO
    <br>
    <br>
    <label for="a3" id="c">Question 3</label>
    <input type="radio" name="a3" value="YES" id="h">YES
    <input type="radio" name="a3" value="NO" id="i">NO
    <br>
    <br>
    <input type="button" name="Submit" value="Result" style="margin-left:100px;" onClick="theResult()">
</form>
function theResult(){
    var inputs = document.getElementsByTagName('input');
    var question = [ {selected: '', expected: 'YES'},
                     {selected: '', expected: 'YES'},
                     {selected: '', expected: 'NO'}
                   ];
    var tmpSelected = [];

    for(var i = 0; i < inputs.length; i++){
        var tmp = inputs[i];
        if(tmp.type == 'radio' && tmp.checked){
            tmpSelected.push(tmp.value);
        }
    }
    for(var i = 0; i < tmpSelected.length; i++){
        question[i].selected = tmpSelected[i];
    }

    validateResults(question);
};

function validateResults(results){
    var status = '';
    for(var i = 0; i < results.length; i++){
        if(results[i].selected != results[i].expected){
            status = 'Not Good'
            break;
        } else {
            status = 'Good';
        }
    }
    console.log(status);
    return status;
}