eventlistener“ blur”并设置outerHTML

如何解决eventlistener“ blur”并设置outerHTML

我有此代码:

function setInfo(id,idelem2) {

        let myElement = document.getElementById(idelem2).outerHTML;
        let test = document.getElementById(idelem2);
        let tag = test.tagName;
        test.outerHTML = "<input id='"+idelem2+"' type='text' autocomplete='off'>";
        let myInput = document.getElementById(idelem2);
        document.getElementById(idelem2).focus();

        function escapeHTML(text) {

            var map = {
                '&': '&amp;','<': '&lt;','>': '&gt;','"': '&quot;',"'": '&#039;'
            };
            
            return text.replace(/[&<>"']/g,function(m) { return map[m]; 

            });

        }

        document.addEventListener('mousedown',function(event) {

            myInput.outerHTML = myElement;
            return false;

        })

        myInput.addEventListener('keyup',function(event) {

                if(event.keyCode === 13) {

                    let newvalue = myInput.value;

                    $(document).ready(function() {

                        let post = {};
                        post[id] = newvalue;

                        $.ajax({

                            type: 'POST',url: 'traitements/traitement-profil.php',data: post,dataType: 'text',success: function(data) {

                                if(data != "Operation réussie !") {

                                    let errorWindow = document.getElementById('erreur');

                                    errorWindow.className = "alert alert-danger my-5 text-center";
                                    errorWindow.innerHTML = data;

                                    setTimeout(() => {

                                        errorWindow.className = "alert alert-danger my-5 text-center d-none";

                                    },4500);

                                }

                                if(data == "Operation réussie !") {

                                    if(idelem2 == "monSite") {

                                        if(newvalue == "") {

                                            myInput.outerHTML = "<"+tag+" id="+idelem2+">"+"Non renseigné !</"+tag+">";
                                            let errorWindow = document.getElementById('erreur');
                                            errorWindow.className = "alert alert-success my-5 text-center";
                                            errorWindow.innerHTML = data;
                                            setTimeout(() => {

                                                errorWindow.className = "alert alert-danger my-5 text-center d-none";

                                            },4500);
                                            
                                            return;

                                        }

                                        myInput.outerHTML = "<a class='text-white' id="+idelem2+" href='"+newvalue+"' target='_blank' >Site personnel</a>";
                                        let errorWindow = document.getElementById('erreur');
                                        errorWindow.className = "alert alert-success my-5 text-center";
                                        errorWindow.innerHTML = data;
                                        setTimeout(() => {

                                            errorWindow.className = "alert alert-danger my-5 text-center d-none";

                                        },4500);

                                        return;

                                    }

                                    if(idelem2 == "monGithub") {

                                        if(newvalue == "") {

                                            myInput.outerHTML = "<"+tag+" id="+idelem2+">"+"Non renseigné !</"+tag+">";
                                            let errorWindow = document.getElementById('erreur');
                                            errorWindow.className = "alert alert-success my-5 text-center";
                                            errorWindow.innerHTML = data;
                                            setTimeout(() => {

                                                errorWindow.className = "alert alert-danger my-5 text-center d-none";

                                            },4500);

                                            return;

                                        }

                                        myInput.outerHTML = "<a class='text-white' id="+idelem2+" href='https://github.com/"+newvalue+"' target='_blank' >"+newvalue+"</a>";
                                        let errorWindow = document.getElementById('erreur');
                                        errorWindow.className = "alert alert-success my-5 text-center";
                                        errorWindow.innerHTML = data;
                                        setTimeout(() => {

                                            errorWindow.className = "alert alert-danger my-5 text-center d-none";

                                        },4500);

                                        return;

                                    }

                                    if(newvalue == "") {

                                        myInput.outerHTML = "<"+tag+" id="+idelem2+">"+"Non renseigné !</"+tag+">";
                                        let errorWindow = document.getElementById('erreur');
                                        errorWindow.className = "alert alert-success my-5 text-center";
                                        errorWindow.innerHTML = data;
                                        setTimeout(() => {

                                            errorWindow.className = "alert alert-danger my-5 text-center d-none";

                                        },4500);

                                    } else {

                                        myInput.outerHTML = "<"+tag+" id="+idelem2+">"+newvalue+"</"+tag+">";
                                        let errorWindow = document.getElementById('erreur');
                                        errorWindow.className = "alert alert-success my-5 text-center";
                                        errorWindow.innerHTML = data;

                                        setTimeout(() => {

                                            errorWindow.className = "alert alert-danger my-5 text-center d-none";

                                        },4500);
                                    
                                    }
                                    
                                } else {

                                    myInput.outerHTML = myElement;

                                }

                            }

                        });

                    });

            } else if(event.keyCode === 27) {

                myInput.outerHTML = myElement;
                return;

            }

        })
        
    }

简单的解释是: 在我的用户个人资料页面上,我具有该用户的所有信息,每个信息旁边都有一个图标。 当用户单击图标时,包含信息的范围将转换为输入。 我把重点放在创建的输入上。 我添加了一个均匀的侦听器,因此如果输入失去焦点,它会变回一个跨度。并退出该功能。 我添加了另一个事件侦听器,因此,如果用户输入了某些内容(或未输入),然后按enter键,则新输入将被处理(类似于一种形式),并且输入转换回包含新数据的范围。我还添加了一个小窗口,通知更改是否有效,在4.5秒后又没有显示

问题在于,当用户按下Enter键时,输入会转换回一个跨度,但包含的数据与以前相同。 我在控制台中将其作为错误消息得到:

Uncaught DOMException: Failed to set the 'outerHTML' property on 'Element': The node to be removed is no longer a child of this node. Perhaps it was moved in a 'blur' event handler?

按下回车键后,我试图删除事件侦听器,但是它仍然显示此错误消息,并且当输入转换回跨度时,不会在跨度中显示新数据。

请注意,我知道此代码无法防止html注入。我很着急地写了它,并没有花时间来保护它,但是将来我会的。因此,不用担心。 :)

哦,还要注意,即使没有在跨度中显示数据,Ajax仍然可以正常工作,并且如果满足要求,数据库中的数据也会更改。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res