Как Поддержать Корректное событие JavaScript После Используя (верный) cloneNode

Декодирование избыточно

В первую очередь у вас была эта «ошибка» из-за неправильного понимания того, что происходит.

Вы получаете b, потому что вы закодированы в utf-8 и теперь это объект байтов.

 >> type("text".encode("utf-8"))
 >> <class 'bytes'>

Исправления:

  1. Вы можете просто напечатать строку сначала
  2. Резервировать ее после кодирование
5
задан Rob W 29 December 2011 в 12:24
поделиться

6 ответов

Не помещайте обработчик в каждую ссылку (это действительно должно быть кнопкой, BTW). Используйте распространение событий для обработки всех кнопок с одним обработчиком:

formObject.onclick = function(e)
{
    e=e||event; // IE sucks
    var target = e.target||e.srcElement; // and sucks again

    // target is the element that has been clicked
    if (target && target.className=='remove') 
    {
        target.parentNode.parentNode.removeChild(target.parentNode);
        return false; // stop event from bubbling elsewhere
    }
}

+

<div>
  <input…>
  <button type=button class=remove>Remove without JS handler!</button>
</div>
7
ответ дан 14 December 2019 в 13:52
поделиться

Я протестировал это в IE7 и FF3, и он работал как ожидалось - должно быть что-то еще продолжение.

Вот мой сценарий тестирования:

<div id="x">
    <div class="input-line" id="y">
        <input type="text">
        <a href="#" onclick="$(this).up().remove();"> Remove </a>
    </div>
</div>

<script>

$('x').appendChild($('y').cloneNode(true));
$('x').appendChild($('y').cloneNode(true));
$('x').appendChild($('y').cloneNode(true));

</script>
0
ответ дан 14 December 2019 в 13:52
поделиться

Для отладки этой проблемы я перенес бы код

$(this).up().remove()

в функции:

function _debugRemoveInputLine(this) {
    debugger;
    $(this).up().remove();
}

Это позволит Вам узнавать, какой $ (это) возвращает. Если это действительно возвращает больше чем один объект (несколько строк), то Вы определенно знаете, где посмотреть - в коде, который создает элемент с помощью cloneNode. Вы делаете какую-либо модификацию получающегося элемента (т.е. изменение идентификационного атрибута)?

Если бы у меня была проблема, Вы описываете, я рассмотрел бы добавляющие уникальные идентификаторы к элементу инициирования и элементу "строки".

0
ответ дан 14 December 2019 в 13:52
поделиться

Вы могли попытаться клонировать использование innerHTML метода или соединения:

var newItem = $(item).cloneNode(false);
newItem.innerHTML = $(item).innerHTML;

Также: Я думаю, что cloneNode не клонирует события, зарегистрированные в addEventListener. Но клонированы attachEvent события IE. Но я мог бы быть неправым.

0
ответ дан 14 December 2019 в 13:52
поделиться

Похож Вы используете jQuery? Это имеет метод для клонирования элемента с событиями: http://docs.jquery.com/Manipulation/clone#true

Править: Ой я вижу, что Вы используете Прототип.

-1
ответ дан 14 December 2019 в 13:52
поделиться

Первый ответ является корректным.

Pornel неявно предлагает большую часть перекрестного браузера и решения агностика платформы.

Не протестировали его, но понятие будет работать в этих динамических событиях вовлечения ситуаций.

0
ответ дан 14 December 2019 в 13:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: