Как выбрать определенный динамически сгенерированный элемент с Prototype / JS? - PullRequest
1 голос
/ 02 июля 2010

Я перебираю элементы из базы данных через PHP, пытаюсь вызвать внешнюю форму для редактирования каждого элемента при нажатии. Я написал Javascript, основанный на платформе Prototype, которая доставляет меня в основном туда. Однако при попытке выбрать родительский элемент выбранного элемента после первого успешного редактирования последующие изменения завершаются неудачно, и содержимое первого отредактированного элемента заменяется последним нажатым элементом.

Другими словами, у меня есть такой список:

A В C

После нажатия «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 голосов
/ 02 июля 2010

Что оценивает "this" во время выполнения? Вместо

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

попробуйте получить элемент из события:

var block = $(Event.element(evt)).up('div.form');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...