我通过 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)); ?>
最佳答案
运行时“this”的计算结果是什么?而不是
var block = this.up('div.form');
尝试从事件中获取元素:
var block = $(Event.element(evt)).up('div.form');
关于javascript - 如何使用 Prototype/JS 选择特定的动态生成元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3168342/