【问题标题】:Manipulation of div ids using Dojo 1.5使用 Dojo 1.5 操作 div id
【发布时间】:2011-05-19 10:30:14
【问题描述】:

我最近在我的公司接手了一个基于网络的产品。它最初是使用在 Catalyst/Template Toolkit 之上运行的旧版 Dojo 开发的(因此它全部提交给后端的 Perl)。从那以后,我已经采取措施至少更新到 Dojo 1.5

具体来说,我现在要解决的问题与 div id 有关。这是一个表单页面,起初有一个组合框、一个下拉选择和一个文本框。为了简洁起见,我将压缩这个...... HTML 看起来像这样......

<div id="actions">
      <div id="prelim_actions_1_div">
   Variable: <input type="text" value="" 
                class=lighttext size=50 
                id="prelim_actions_xvar_1" 
                name="prelim_actions_xvar_1"/> 

   <a href="javascript:void();" title="Delete" 
      onclick="delete_section('prelim_actions_1_div')">
      <img src="http://localhost:3000/static/images/16-square-red-delete.png"/></a>

  <a href="javascript:void();" title="Insert Below" 
     onclick="add_action_below('prelim_actions', 'prelim_actions_1_div')">
     <img src="http://localhost:3000/static/images/16-em-down.png"/></a>

  </div>
</div>

第一个 Javascript href 允许您删除文本框 (title="Delete"),第二个允许您添加另一个成功增加 div id 的文本框。在上面的例子中

<div id="actions"> 

将成功嵌套在其中...

<div id="prelim_actions_1_div">
 ........
 ........
</div>
<div id="prelim_actions_2_div">
....
....
</div>

问题是 javascript 中的该当删除函数。我发现,通过像真实用户一样添加和删除的各种组合,通过尝试注册已经注册的 div 并成功写入多个同名 div id,在 Firebug 中引发错误是可能的。

所以我的问题是,我不是在找人来帮我打出解决方案(但我确实需要尝试学习这一点),是否有更简单的方法来实现这一点。这是动态添加和删除文本框的能力,并确保在点击提交按钮之前每个文本框都有一个唯一的 div id(和名称)。

那里的任何 dojo/javascript 专业人士有任何智慧之言或链接可以帮助我指出正确的方向吗? 珍妮

【问题讨论】:

  • 您最好避免使用 DIV,并根据某种模式或类进行查询以找到您需要的内容,这样您就有了可重用的东西而不会出现冲突问题。
  • @peller:Ryley 的解决方案解决了碰撞问题。我在他的解决方案下面的答案中指出了如何。非常感谢你的替代想法。 JW

标签: javascript html dojo dynamic-data


【解决方案1】:

很大程度上取决于delete_sectionadd_action_below 现在的工作方式。我建议你让delete_section 变得非常愚蠢——只是盲目地删除传入的 div。在执行add_action_below 函数时,请执行以下操作:

//figure out the next available spot
var i = 1;
while(dojo.query('#prelim_actions_'+i).length){
  i++;
}

console.log('available id: prelim_actions_'+i);
//create div contents
//append after clicked section

我不确定您的应用程序的后端是如何工作的,但很可能您只需通过参数并找到名为 prelim_actions_xvar_.* 的参数就可以了。

【讨论】:

  • 这是一个伟大的开始 Ryley!这是回答我的问题的虚拟业力。 JW
  • 这就是为什么这解决了我的问题。以前我有添加部分计算有多少个 div,如果有“3”,下一个数字将是 4“。表面上听起来不错,但如果我有 4 个 div,删除让我们说第 3 个,下一个将被命名为“4”,它与已经存在的“4”冲突。Ryley 的解决方案从 1 计数到下一个不存在的数字(在示例中为“3”),然后我有 1, 2,4,3 作为我的 div。不是按顺序排列,但它们不需要,它们只需要唯一性。这种唯一性是“名称”属性的关键。
猜你喜欢
  • 2011-06-26
  • 2012-02-15
  • 2013-05-02
  • 2011-08-07
  • 1970-01-01
  • 2013-12-23
  • 2017-01-21
  • 2017-12-29
  • 1970-01-01
相关资源
最近更新 更多