心得:

  • 一般网络传输参数用简单的一个字符,或者0,1;提高传递效率
  • 联想SpringMVC接收传递参数,数组类型等

image.png

1、添加题目的实现

topic-add.html文件在前端显示页面,请求传递给TopicController进行保存添加题目
image.png

2、在为选项设置 “ture”/“false”时遇到的问题

image.png

问题:

  1. 在使用传统方法,选择复选框携带`value="yes"`参数,出现图二中的几种情况,无法一一对应到选项(option)是ture/false

解决方法:

。。。JS看不懂。

  1. <div class="option-list">
  2. <div class="option">
  3. <span class="content">
  4. <input type="text" name="content" placeholder="选项内容">
  5. </span>
  6. <span class="key">
  7. <input type="hidden" name="isKey" value="false">
  8. <input type="checkbox">答案
  9. </span>
  10. </div>
  11. <div class="option">
  12. <span class="content">
  13. <input type="text" name="content" placeholder="选项内容">
  14. </span>
  15. <span class="key">
  16. <input type="hidden" name="isKey" value="false">
  17. <input type="checkbox">答案
  18. </span>
  19. </div>
  20. </div>
  21. <div class="operation">
  22. <input type="reset" value="重置">
  23. <input type="submit" value="添加">
  24. </div>
  25. </form>
  26. </div>
<script type="text/javascript" >
    ( function () {

        // 根据参数指定的选择器选择匹配于该选择器的所有元素组成的"集合"(一个类似于数组的容器)
        let checkboxList = document.querySelectorAll( ".topic-container .option-list .option .key input[type=checkbox]" );
        // console.log( checkboxList ); // 在控制台打印"集合"

        // 当 checkbox 状态发生改变时就修改前面的 hidden 的取值
        let action = function( event ){ // 当点击事件发生时,点击事件对应的对象会传入到 该函数
            let checkbox = event.target ; // 通过事件对象来获取事件源对象(也就是被点击的那个复选框)
            // console.dir( checkbox.checked ); // 当复选框被勾选时其checked属性值为true,若为勾选即为false
            let hidden = checkbox.previousElementSibling ; // 获得复选框之前的元素
            hidden.setAttribute( "value" , checkbox.checked );
            // console.log( hidden );
        }

        // 声明一个函数,用来处理 "集合" 中的每个元素
        let fn = function ( element ) { // 参数 element 是由 forEach 函数执行时传入的
            // console.log( element );
            element.addEventListener( "click" , action , false );
        }
        // 通过 forEach 来遍历"集合" : 遍历"集合"中的每个元素,没遇到一个元素就调用一次参数对应的函数
        checkboxList.forEach( fn ); // forEach函数在调用参数对应的函数时会传入依次 当前元素、索引、"集合"

        /* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
        const submitButton = document.querySelector( ".topic-container .operation input[type=submit]" );
        const topicForm = document.querySelector( ".topic-container form" );
        let submitAction = function( event ){
            event.preventDefault(); // 阻止事件默认行为
            event.stopPropagation(); // 停止事件传播

            // 这里可以完成页面上所输入的内容的检查

            topicForm.submit(); // 通过调用 表单对象 的 submit 函数来提交
        }
        submitButton.addEventListener( "click" , submitAction , false );
    } )();
</script>