javascript-用js循环添加元素时出现无论点击哪个后面的删除按钮都只能删掉最后一排且只能删除一次

问题描述

用js循环添加元素时出现无论点击哪个后面的删除按钮都只能删掉最后一排且只能删除一次
 $(function(){
        alert("fdsafsd");
        var fileNames = $("#fileName").val();
        var filePaths = $("#filePath").val();
        var fileNameList = new Array();
        var filePathList = new Array();
        if(fileNames.length !=0 && fileNames.length != "" && filePaths.length !=0 && filePaths.length !=""){
            fileNameList = fileNames.split(", ");
            filePathList = filePaths.split(", ");
            alert(fileNameList[0]+fileNameList[1]+fileNameList[2]);
            alert(filePathList.length);
            for(i = 0; i < fileNameList.length; i++){
                $("#i").val(i+1);
                alert($("#i").val());
                var td = document.getElementById("more");
                var br = document.createElement("br");
                var a = document.createElement("a");
                var input = document.createElement("input");
                var input1 = document.createElement("input");
                var input2 = document.createElement("input");
                var button = document.createElement("input");
                var span=document.createElement("span");
                a.id= "downloadFile" + i;
                a.innerHTML = ">>附件下载";
                a.href = "${baseURL}/" + filePathList[i];
                a.download = fileNameList[i];
                input.id = "attachmentFile" + i;
                input.disabled = "disabled";
                input.style = "background: transparent; border: none;";
                input.value = fileNameList[i];
                input.type = "text";
                input1.value = fileNameList[i];
                input1.type = "text";
                input1.name = "vo.updownFileName";
                input1.id = "updownFileName" + i;
                input2.value = filePathList[i];
                input2.type = "text";
                input2.id = "updownFilePath" + i;
                input2.name= "vo.updownFilePath";
                button.type = "button";
                button.value = "删除";

                td.appendChild(br);
                td.appendChild(a);
                td.appendChild(input);
                td.appendChild(input1);
                td.appendChild(input2);
                td.appendChild(span);
                td.appendChild(button);

                button.onclick = function()
                {
                    alert("删除");
                    td.removeChild(br);
                    td.removeChild(a);
                    td.removeChild(input);
                    td.removeChild(input1);
                    td.removeChild(input2);
                    td.removeChild(span);
                    td.removeChild(button);

                }
            }
        }
    });
    ![图片说明](http://img.ask.csdn.net/upload/201604/18/1460972877_485212.png)
    请大神帮我看看到底是哪里的原因?

解决方案

闭包没做好,导致删除的是最后的那行的控件,删除后你再执行删掉操作dom对象不存在就会报错了,改下结构,用div扩起容器,然后通过dom关系来删除div就行了

               input2.name = "vo.updownFilePath";
                button.type = "button";
                button.value = "删除";

                ////////////////////////////
                var div=document.createElement('div')////////////
                div.appendChild(br);
                div.appendChild(a);
                div.appendChild(input);
                div.appendChild(input1);
                div.appendChild(input2);
                div.appendChild(span);
                div.appendChild(button);
                td.appendChild(div)////////////
                ////////////////////////////

                button.onclick = function () {
                    alert("删除");
                    td.removeChild(this.parentNode);//this为当前button,parentNode就是button的div容器,td直接删除这个div就行了

                }

解决方案二:


图片好像看不了

小妹刚刚注册的没啥币,请帮帮忙咯!

解决方案三:

捉急啊!弄了一下午了都找到头绪,几乎要白了我3千青丝了。赶快来个大神救救我吧!

时间: 2024-10-09 04:52:02

javascript-用js循环添加元素时出现无论点击哪个后面的删除按钮都只能删掉最后一排且只能删除一次的相关文章

js实现点击删除按钮,然后删除元素和按钮

问题描述 js实现点击删除按钮,然后删除元素和按钮 代码如下: 1 2 3 4 我想实现当我点击删除按钮时,当前的<li>元素和删除按钮也删除掉,removeMsg()方法该怎么写 解决方案 定义一个a标签 $('#fu a').click(// a标签单击事件处理函数 function(){ // 删除li标签 $('#fu li').remove(); } ); 解决方案二: 1 相关文章 javascript-用js循环添加元素时出现无论点击哪个后面的删除按钮都只能删掉最后一排且只能删除

javascript 使用for循环时该注意的问题-附问题总结_javascript技巧

如果您希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的. 很多时候我们都用到for循环,而用到for循环部门往往对一个数组进行循环,其中我们很多时候都是这样写的: // 次佳的循环 for (var i = 0; i < myarray.length; i++) { // 使用myarray[i]做点什么 } 这样的代码虽然没有什么大问题,但是每次循环都会获取一下数组的长度,这回降低你的代码,尤其当myarray不是数组,而是一个HTMLCollection对象的时候.

JavaScript的while循环的使用

  这篇文章主要介绍了详解JavaScript的while循环的使用,是JS入门学习中的基础知识,需要的朋友可以参考下 在写一个程序时,可能有一种情况,当你需要一遍又一遍的执行一些操作.在这样的情况下,则需要写循环语句,以减少代码的数量. JavaScript支持所有必要的循环,以帮助您在所有编程的步骤. while 循环 在JavaScript中最基本的循环是while循环,这将在本教程中学习讨论. 语法 ? 1 2 3 while (expression){ Statement(s) to

js获取视频时长代码

 下面的这段js获取视频时长代码是网上找的,还没有测试,需要的朋友可以参考下 网上找的,因为最近要用,但还没试过    代码如下:     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">       <html xmlns="http://www

javascript-用JS实现自动填写表单功能时form无name属性怎么办?

问题描述 用JS实现自动填写表单功能时form无name属性怎么办? 我想实现能自动填写某个网站表单的功能,百度了一下感觉http://www.cnblogs.com/fanyong/p/3344364.html这个方法比较简单就试了一下,具体方法如下 第一步: 在页面查看源代码,把Form中包含的需要填列的HTML控件找出来如: 第二步:编写代码 javascript:mainfrm.username.value="stangray";mainfrm.submit.focus();

三个js循环的关键字示例(for与while)_基础知识

循环的三种写法: <!doctype html> <title>js循环 by </title> <meta charset="utf-8"/> <meta name="keywords" content="js循环 by " /> <meta name="description" content="js循环 by " /> </

JavaScript 模块的循环加载实现方法_javascript技巧

"循环加载"(circular dependency)指的是,a脚本的执行依赖b脚本,而b脚本的执行又依赖a脚本. // a.js var b = require('b'); // b.js var a = require('a'); 通常,"循环加载"表示存在强耦合,如果处理不好,还可能导致递归加载,使得程序无法执行,因此应该避免出现. 但是实际上,这是很难避免的,尤其是依赖关系复杂的大项目,很容易出现a依赖b,b依赖c,c又依赖a这样的情况.这意味着,模块加载机

JavaScript中对循环语句的优化技巧深入探讨_javascript技巧

循环是所有编程语言中最为重要的机制之一,几乎任何拥有实际意义的计算机程序(排序.查询等)都里不开循环. 而循环也正是程序优化中非常让人头疼的一环,我们往往需要不断去优化程序的复杂度,却因循环而纠结在时间复杂度和空间复杂度之间的抉择. 在 javascript 中,有3种原生循环,for () {}, while () {}和do {} while (),其中最为常用的要数for () {}. 然而for正是 javascript 工程师们在优化程序时最容易忽略的一种循环. 我们先来回顾一下for

JavaScript 模块的循环加载

"循环加载"(circular dependency)指的是,a脚本的执行依赖b脚本,而b脚本的执行又依赖a脚本. // a.js var b = require('b'); // b.js var a = require('a'); 通常,"循环加载"表示存在强耦合,如果处理不好,还可能导致递归加载,使得程序无法执行,因此应该避免出现. 但是实际上,这是很难避免的,尤其是依赖关系复杂的大项目,很容易出现a依赖b,b依赖c,c又依赖a这样的情况.这意味着,模块加载机