我正在通过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)); ?>
答案 0 :(得分:0)
“this”在运行时评估的是什么?而不是
var block = this.up('div.form');
尝试从事件中获取元素:
var block = $(Event.element(evt)).up('div.form');