• 通过DOM节点操作来获取表单信息


    这是之前突发奇想地用dom节点的关系来操作表单的故事。。

    事情的经过是这样的,大概就是一个平台注册后有留言功能,管理员登录之后可以对这些留言进行回复。这个页面呢,就是通过foreach获取到数据库里的信息,把用户的ID以及留言信息最后呈现在界面上的样子大概如下图(我的画图天赋真是杠杠滴)

    没错就是这么酷炫的。

    左侧是用户的ID 中间是用户留言内容 每个后面都有一个回复按钮 管理员点击回复之后 相应的留言框下部就会出现一个文本框,然后就可以愉快的回复了。对了还有一个回复发送以及删除功能。大概就是如下图片,你们体会一下。。

    然后开始的代码如下

     1 <div style="border:1px solid">
     2         <ul>
     3             <c:forEach items="$(meslist)" var="mesList">
     4                 <li>
     5                     <h3>
     6                         $(mesList.name)<li>$(mesList.email)</li><span clss="timer">$(mesList.item)</span>
     7                     </h3>  
     8                     <p>管理员您好:<br/> $(meslist.contene)</p>            
     9                     <div><button onclick="reply(this)">回复</button></div>         <!--  这里点击后要出现文本框 -->
    10                     <form id="replyCon" name="replyCon" style="display:none">
    11                         <textarea cols="86"></textarea>
    12                         <input type="submit" class="sendBtn" value="发送" onclick="sendMsgs(this)">
    13                         <input type="reset" class="cancelBtn" value="取消" onclick="cancelMsg(this)">      
    14                     </form>
    15                 </li>
    16             </c:forEach>
    17         </ul>        
    18     </div>

    大概就是点击回复之后,会出现一个文本框,编辑好内容,可以提交了。于是我就给reply()函数传递了参数this,本想着定义函数时给其传入一个形参,在函数内部操作不就可以了吗,可是人生不如意十之八九。添加了之后每次不管去点击第几个用户的回复按钮,都会在第一个用户下部的区域出现文本框,试了半天后并没有什么卵用,于是我就想到了一个很神奇的方法,不如让形参沿着作用域链往上找到父节点然后顺级又下来,找到当前的<div>使其显示为block,这不就成了吗。果然被机智的我解决了,代码如下

            function replay(o){
              var o.parentNode.parentNode.getElementsByTagName('form')[0].style.display="block";
            }

    果然每次点击之后都会在其相应的区域出现文本框,大功告成。。

    然而点击send按钮之后还要获取<h3>标签里的用户名信息以及<textarea>里的回复留言信息,于是又用了同样的方法,代码如下

     function sendMsgs(o){
           var rName=o.parentNode.parentNode.getElementsByTagName('h3')[0].getElementsByTagName('li')[0].innerHtml;
              var content=o.parentNode.getElementsByTagName('textarea')[0].value;
            }

    然后愉快的解决了问题。

    完。。。

  • 相关阅读:
    react native mapbox MarkView只显示一个子组件问题
    react native mapbox 截图压缩(@react-native-mapbox-glmaps)
    @react-native-mapbox-gl/maps语言插件汉化不完善问题
    SQLSERVER优化
    springboot+react整合
    sqlserver求小数取位
    C#中Math.Round() 的真实含义
    Java Nio学习总结(一)
    Linq去重(自定义字段)
    WPF学习记录(一):布局
  • 原文地址:https://www.cnblogs.com/huangzhilong/p/4943250.html
Copyright © 2020-2023  润新知