【问题标题】:Unexpected output from html form input DOM reference来自 html 表单输入 DOM 参考的意外输出
【发布时间】:2019-11-04 22:03:02
【问题描述】:

无论我选择什么单选按钮,控制台输出始终是“bcdab”,即使我什么都不选择。

我做错了什么?为什么我的选择不起作用?

<form name="quiz">
  <input type="radio" name="1" value="a"/>
  <input type="radio" name="1" value="b"/>
  <input type="radio" name="1" value="c"/>
  <input type="radio" name="1" value="d"/> <br/>
  ...
  <input type="radio" name="5" value="a"/> 
  <input type="radio" name="5" value="b"/> 
  <input type="radio" name="5" value="c"/> 
  <input type="radio" name="5" value="d"/> <br/>
  <button type="button" onclick="gradeQuiz();">Submit Quiz</button>
</form>

<script>
  function gradeQuiz(){
    var xhr=new XMLHttpRequest();
    var q=document.forms[0].elements;
    ...
    xhr.send("&1="+q['1'].value+
             "&2="+q['2'].value+
             "&3="+q['3'].value+
             "&4="+q['4'].value+
             "&5="+q['5'].value);
    ...
    console.log(xhr.ResponseText);
  }
</script>

<?php
  $choices=array($_POST['1'],$_POST['2'],$_POST['3'],$_POST['4'],$_POST['5']);
  echo(implode($choices));
?>

【问题讨论】:

    标签: php html forms dom xmlhttprequest


    【解决方案1】:

    一种更简单的方法:-

    var q1 = document.querySelector('input[name = "1"]:checked');
    var q2 = document.querySelector('input[name = "2"]:checked');
    var q3 = document.querySelector('input[name = "3"]:checked');
    var q4 = document.querySelector('input[name = "4"]:checked');
    var q5 = document.querySelector('input[name = "5"]:checked');
    

    终于:-

    xhr.send(
    "&1="+q1.value+
    "&2="+q2.value+
    "&3="+q3.value+
    "&4="+q4.value+
    "&5="+q5.value
    );
    

    【讨论】:

      【解决方案2】:

      看到问题:-

      xhr.send("&1="+q['1'].value+
                   "&2="+q['2'].value+
                   "&3="+q['3'].value+
                   "&4="+q['4'].value+
                   "&5="+q['5'].value);
      

      当你使用q['1'] - 它调用第二个&lt;input&gt; 那个值是b 然后:-

      q['2'].value= 'c';
      q['3'].value= 'd';
      q['4'].value= 'a';
      q['5'].value= 'b';
      

      所以最后你得到了值bcdab

      解决方案:-

      function gradeQuiz(){
      var xhr=new XMLHttpRequest();
      for (i=0;i<document.getElementsByName('1').length;i++) { if(document.getElementsByName('1')[i].checked){ val1= document.getElementsByName('1')[i].value; } }
      for (i=0;i<document.getElementsByName('2').length;i++) { if(document.getElementsByName('2')[i].checked){ val2= document.getElementsByName('2')[i].value; } }
      for (i=0;i<document.getElementsByName('3').length;i++) { if(document.getElementsByName('3')[i].checked){ val3= document.getElementsByName('3')[i].value; } }
      for (i=0;i<document.getElementsByName('4').length;i++) { if(document.getElementsByName('4')[i].checked){ val4= document.getElementsByName('4')[i].value; } }
      for (i=0;i<document.getElementsByName('5').length;i++) { if(document.getElementsByName('5')[i].checked){ val5= document.getElementsByName('5')[i].value; } }
      ...
       }
      

      最后:-

      xhr.send("&1="+val1+
      "&2="+val2+
      "&3="+val3+
      "&4="+val4+
      "&5="+val5);
      

      【讨论】:

      • 我的印象是form[0] 获取 inputByIndex,而form['1'] 获取 inputByName。不? source:MDN webdocs
      • form[0] & form['0'] 两者的工作方式相同,并且都选择第一个表单元素,其中form[0].elements & form['0'].elements 都得到inputByIndex
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-12
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      相关资源
      最近更新 更多