在 javascript 中创建第二个 html 元素会删除第一个
Creating 2nd html element in javascript deletes the first
我有一个javascript代码,可以动态创建一个包含文件数据的选择框。它们有点大,一旦一切正常,我将尝试移动到外部 js 而不是在 HTML 中。我的问题是,当我尝试在不同的文件上运行相同的脚本时,它似乎会清除第一个脚本中的信息。所以我最终填充了一个选择元素和一个空白。最后一个脚本是唯一成立的脚本,这就是为什么我认为它以某种方式清除了第一个脚本。任何建议。我正在构建一个菜单,所以我需要这段代码是模块化的。提前谢谢。
*更新*我已经拆分了 processcsv 文件,但我仍然得到相同的结果。在函数的每个秋天,我都会传递一个不同的选择元素。在网页上,我只会看到最后一个执行,选择的已处理的 earliar 显示为空白。我认为问题是我的第一个 xmlrequest 永远不会达到 readystate == 4,但最后一个可以。我不确定我能做些什么来控制它,为什么除了最后一个失败之外,它都是失败的。
我的网页
<div class="menu_container">
<div class="menu_element" id="plant_div">
<select class="Menu" id="plant_select">
<script>
<!--var plant_select = document.createElement("select"); -->
var datafile = '';
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET","http://localhost:8080/res/plants.csv",true);
xmlhttp.send();
xmlhttp.onreadystatechange = function()
{
if(xmlhttp.status==200 && xmlhttp.readyState==4)
{
processCSV(xmlhttp.responseText, plant_select,"select plant");
}
}
</script>
</select>
</div>
<div class="menu_element" id="plantType_div">
<select class="Menu" id="plantType_select">
<script>
<!--var plant_select = document.createElement("select"); -->
var datafile = '';
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET","http://localhost:8080/res/planttypes.csv",true);
xmlhttp.send();
xmlhttp.onreadystatechange = function()
{
if(xmlhttp.status==200 && xmlhttp.readyState==4)
{
processCSV(xmlhttp.responseText, plantType_select,"select PLant Type);
}
}
</script>
</select>
</div>
</div>
一个单独的 js 文件,其中包含
function processCSV(file,parentNode,defaultmessage)
{
var frag = document.createDocumentFragment()
, lines = file.split(''n'), option;
var intial_option = document.createElement("option");
intial_option.setAttribute("value","");
intial_option.setAttribute("disabled","disabled");
intial_option.setAttribute("selected","selected");
intial_option.innerHTML = defaultmessage;
frag.appendChild(intial_option)
for (var i = 0, len = lines.length; i < len; i++){
option = document.createElement("option");
option.setAttribute("value", lines[i]);
option.innerHTML = lines[i];
frag.appendChild(option);
}
parentNode.appendChild(frag);
}
具有相同名称的第二个函数将覆盖第一个函数。
在不同的.js文件中使用两种同名的方法
使用唯一的函数名称,或者只是将函数移出并调用两次。
function processCSV(file,parentNode) {...}
processCSV('/my/file/path', myParentNode);
您永远不会选择要向其添加项的元素。每次调用时,将document.getElementById(idOfParentNode)
传递给processCSV
。也不需要在 select
标记中内联调用。
(也就是说,plant_select 和 plantType_select 当前未定义为所示代码中的任何内容)
而且,因为你正在执行我们在全局范围内可以看到的所有javascript,所以这些变量都附加到window上。这意味着您正在通过重新初始化 XMLHTTP 对象来踩踏它。考虑将更多内容封装到单个脚本块中分解更好的函数中。
- 删除对HTML元素的拖动
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- 从所有元素中删除HTML5验证
- 如何检查元素的内容是否为空,如果为空,请在jquery中删除该元素
- 从组件状态的数组中删除元素
- angularjs删除动态形式元素中的特殊字符
- Mongoose-在更新中删除数组元素
- 从数组中删除元素的最佳方法是:javascript/jquery
- 删除不起作用的父元素和所有子元素
- 一些元素没有从数组中删除
- 正在尝试删除子元素的最后一个子元素
- JavaScript-如何按类查找元素并删除此类
- 正则表达式条件来删除元素
- Small Javascript从动态表单中删除多个元素的问题
- javascript:在元素删除后停止setInterval
- JQUERY:动态 AJAX 和 html 元素删除
- AngularJS ngRepeat元素删除
- AngularJS & lt; select>使用ng-model和ng-options在元素删除时被破坏
- jQuery UI datetimepicker绑定到错误的输入后DOM元素删除
- 防止 jQuery 在元素删除时取消绑定事件