我使用道场拖放。当用户添加一个项目到容器(DIV的dojoType =“dojo.dnd.Source”),那么我需要将数据转化成一种形式,所以当用户提交整个页面,我可以以后再处理它的服务器上。这部分工作。 然后删除一个项目,我让他们拖/放一个项目为“垃圾”容器。 我有困难的概念化如何从隐藏字段删除该项目。 我已经有订阅/事件代码来调用以下两种功能。

你能不能让我知道,如果有更好的方式做removeGoalFromHiddenFields功能? 可以有很多“子目标”的项目。

我即将开始的测试与我有什么下文,但我对此有一些疑虑。

谢谢,

尼尔沃尔特斯

   function addGoalToHiddenFields( goalText){
      var field = document.createElement("input");
      field.setAttribute("type","hidden");
      field.setAttribute("value",goalText);
      field.setAttribute("name","subgoal");

      //add new hidden-element to the existing form
      document.getElementById("form1").appendChild(field);
   }

   function removeGoalFromHiddenFields( goalText){

      //remove hidden field 
      nodes = document.getElementById("form1")
      for (i=0;i<nodes.length ;i++ )
           {
             var pos = nodes[i].innerHTML.IndexOf(goalText)
             if (pos > 0)
             {
                 nodes.removeChild(node[i]);

             }
           }

}

另外,我可以做到这一点,而不是:           节点=的document.getElementById( “次级目标”)

有帮助吗?

解决方案

我猜你想要的这里是 dojo.query功能

尝试是这样的:

dojo.query("#form1 input[value=\"" + goalText + "\"]").forEach(function(field) {
    field.parentNode.removeChild(field)
});

其他提示

  

field.setAttribute( “类型”, “隐藏”);

不要在HTML文档中使用的setAttribute。湖中有许多错误的IE浏览器。使用普通的DOM的HTML性质,这也更容易阅读:

field.type= 'hidden';
  

变种POS =节点[I] .innerHTML.IndexOf(goalText)

通过HTML标记搜索的值是愚蠢的,并且当goalText包含像“<”或“和”该HTML将逸出的字符将不工作。

有关上面的代码,它看起来像nodes[i]应该是你那里所附<input>元件,在这种情况下innerHTML是没有好处,因为这将只查询的输入,这是没有的内容中的一个作为输入是一个空元素。相反,看看你放在那里的value属性:

var input= nodes[i];
if (input.name=='subgoal' && input.value==goalText)
    input.parentNode.removeChild(input);
  

另外,我可以做到这一点,而不是:节点=的document.getElementById( “次级目标”)

没有,因为你的子目标元素没有标识。通过名称获得:

var subgoals= form.getElementsByName('subgoal');

(其是相同的DOM-0:)

var subgoals= form.elements.subgoal;

或,一个ID添加到每个子目标,以帮助你以后检索:

field.id= 'id-'+goalText;

以上都不行,再说,如果你能在goalText有特殊字符。

另外,保留在JavaScript创建自己的查询,而不是把一切都在DOM:

var subgoalfields= {};
...
// on add
subgoalfields[goalText]= field;
...
// on remove
subgoalfields[goalText].parentNode.removeChild(subgoalfields[goalText]);
delete subgoalfields[goalText];
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top