Javascript не будет обновлять DOM о том, что кажется недавним - PullRequest
2 голосов
/ 04 декабря 2011

Я использую 100% чистый JavaScript, пробовал Jquery, но это не помогло. Код не работает в FF / Chrome / Safari.

Я построил функцию редактирования на месте, где, когда пользователь нажимает «Редактировать» (вызывая внешнюю функцию с помощью onclick - передавая item_id) - строка текста скрывается, чтобы показать ввод с той же строкой текста в Это. (путем изменения классов) «Изменить» также заменяется на «Сохранить». Когда вы закончите редактирование строки - пользователь нажимает «Сохранить», и все возвращается к нормальному состоянию.

AJAX обрабатывает все обновления, но комментирование блока AJAX не исправляет его.

Я загружаю поток этих объектов. Javascript работает для всех из них - но обновляет DOM, во всяком случае, визуально для того, что показывает элементов до последних 24 часов. Сами блоки идентичны. То есть - элементы, которые были добавлены в течение последних 18-26 часов, когда я нажимаю «Изменить», ничего не делают. НО, если я предупреждаю класс элемента, который я хочу отредактировать, он говорит «редактирование» (в отличие от «сохранено»), как будто он работает. (см. ниже) Хотя это изменение никогда не отражается в элементе проверки.

Код на странице

<input type="text" class="input_field" id="input_254" value="Foo" onkeydown="javascript: if (event.keyCode == 13) { update(254); }" style="display: none; ">
<span class="user_links" id="display_269" style="display:none;">Foo</span> //hidden span that holds the value and acts at the check
<span id="edit_state_269" class="saved" style="display: none;">Foo</span>
<span onclick="update(269)" id="edit_269">Edit</span>

Внешний Javascript

function update(item_id) {

var links_span = document.getElementById('display_' + item_id);
var input_span = document.getElementById('input_' + item_id);
var string_old = document.getElementById('edit_state_' + item_id).innerHTML;
var state_check = document.getElementById('edit_state_' + item_id);
var edit_button = document.getElementById('edit_' + item_id);

if (state_check.getAttribute('class') == 'saved') {

    // Hide the links display list and show the input field
    links_span.style.display = 'none';
    input_span.style.display = 'inline';

    // Change the Edit button text and state_check
    edit_button.innerHTML = 'Save';
    state_check.setAttribute('class','editing');

    //alert(state_check.getAttribute('class')); // this alerts "editing" although in DOM it is still "saved" on the blocks that are the problem

Если были бы полезны какие-либо подробности - я предоставлю их.

Это дьявол проблемы - без очевидного решения. Буду очень признателен за любое направление, которое вы можете дать!

1 Ответ

0 голосов
/ 04 декабря 2011

решаемая. Как обычно это мелочи. Первые несколько блоков загружались при загрузке страницы, а затем скрывались при перемещении пользователя, что приводило к дублированию идентификаторов. Javascript, естественно, выбрал тот, что выше на странице - тот, который был скрыт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...