innerHTML динамически добавляемого элемента, который не обновляется в Chrome - PullRequest
0 голосов
/ 24 декабря 2010

Я изменяю динамически созданный элемент ввода, устанавливая innerHTML, когда я просматриваю элемент в DOM Inspector, я вижу, что переданные мной значения находятся во входных данных. Тем не менее, я не вижу этого на странице? Есть ли функция refresh (), которую я должен вызывать после установки значения?

Я попробовал innerText и value и получил те же результаты.

Вот как я его настраиваю:

$("input[name='group']")[0].innerHTML = groups;

(что касается набора JS и селектора JQuery, я обнаружил, что хромированные плагины непостоянны)

Ответы [ 2 ]

4 голосов
/ 24 декабря 2010

input элементы не содержат HTML.У них есть value s.

Нет, вам не нужно ничего обновлять, изменение должно появиться, как только JavaScript завершит работу (например, завершится обработчик события), и у браузера появится моментобновить дисплей.Если вы делаете это в тесном цикле или что-то в этом роде, вы не увидите результаты до конца цикла, но я не сразу понял, что именно вы делали - если только вы не пошаговыечерез код в инструментах разработчика?Вы не увидите обновления, пока вы пошаговые.

Если нет, то может ли этот элемент не существовать (пока), когда вы вызываете свой код?Помните, что если ваш код находится в элементе script, который находится в HTML до элемента, который вы пытаетесь обновить, вы должны быть уверены, что заставите его ждать, пока остальная часть страницы не будетбыл проанализирован (например, с помощью обратного вызова ready).В качестве альтернативы просто сделайте , как рекомендуют ребята из YUI , и добавьте тег script в конце body.

Вот рабочий пример:

jQuery(function($) {

  setInterval(function() {
    $("input[name='group']")[0].value = "Updated " + new Date();
  }, 500);

});​

Живая копия

Разбивка:

  • Ожидание готовности DOM (помещая код в функцию, которую я передаю в jQuery; этосокращенный способ записи jQuery(document).ready(...)).
  • Настройка интервального таймера для обновления каждые 500 мс.
  • В интервальном обратном вызове найдите элемент ввода с именем"group" и обновите его значение.

Update : Вот более простая серия примеров, демонстрирующих в целом "элемент еще существует?"вещь:

Пример 1:

<form>
  <input type='text' name='group' value='original value' size='60'>
</form>
<script type='text/javascript'>
  // This works, because it's _after_ the element
  // it operates on
  $("input[name='group']")[0].value = "Just one update: " + new Date();
</script>

Живая копия

Пример 2:

<script type='text/javascript'>
  // This FAILS, because it's _before_ the element
  // it operates on
  $("input[name='group']")[0].value = "Just one update: " + new Date();
</script>
<form>
  <input type='text' name='group' value='original value' size='60'>
</form>

Живая копия

Пример 3:

<script type='text/javascript'>
  // This works, because although this script tag is before
  // the element, we're using `ready` to wait until the DOM
  // is ready
  $(function() {
    $("input[name='group']")[0].value = "Just one update: " + new Date();
  });
</script>
<form>
  <input type='text' name='group' value='original value' size='60'>
</form>

Живая копия

1 голос
/ 24 декабря 2010

Текстовое поле не имеет внутреннего HTML. Вам необходимо установить его значение:

$("input[name='group']").val(groups);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...