如何使用Prototype / JS选择特定的动态生成元素?

时间:2010-07-02 18:48:59

标签: javascript ajax prototypejs

我正在通过PHP循环遍历数据库中的项目,尝试在外部表单中调用以在单击时编辑每个项目。我已经基于Prototype框架编写了Javascript,这些框架让我大部分都在那里。但是,在尝试选择所单击项目的父元素时,在第一次成功编辑后,后续编辑将失败,并且第一个已编辑元素的内容将替换为单击的最后一个项目。

换句话说,我有一个这样的列表:

一个 乙 ç

单击“A”并通过我的外部表格将其更改为“1”后,选择“B”并将其更改为“2”会产生以下结果:

2

C

第二项(B或2)的内容替换第一项(a或1)的内容。

请注意,这不是我的PHP外部表单的问题(刷新页面将正确显示我的所有更新值。)我的问题是javascript选择正确的父元素,在其中显示我的帖子的结果。

(作为一个有趣的旁注,当我点击并从列表底部开始更改我的元素时,没有任何元素被覆盖,页面的功能应该如此。)

function inlineEditor() {
$$('div.form span.status').each(function(elm){
 elm.observe('click',function(evt){
   Event.stop(evt);
   var block = this.up('div.form');
   var item = block.id;
   new Ajax.Updater(block,'status_types_edit.php',{
     parameters:{id:item},
     evalScripts:true
   });
});
});
}

<body onload="inlineEditor();">

<?php do { ?>
  <div class="form" id="<?php echo $row_GetStatus_Types['id']; ?>">
   <span class="status"><?php echo $row_GetStatus_Types['status_name']; ?></span>
  </div>
<?php  } while ($row_GetStatus_Types = mysql_fetch_assoc($GetStatus_Types)); ?>

1 个答案:

答案 0 :(得分:0)

“this”在运行时评估的是什么?而不是

var block = this.up('div.form');

尝试从事件中获取元素:

var block = $(Event.element(evt)).up('div.form');