У меня есть этот раздел Try-it-Yourself на моем веб-сайте, но по какой-то причине, когда я хочу иметь более одного раздела Try-it-Yourself, он будет работать только для одного в верхней части страницы. Поэтому, если бы у меня было три из них на странице, то верхняя часть работала бы так, как я хочу, но следующие два ничего не сделали.
У меня есть следующий HTML:
<div class="tryit">
<table>
<tr>
<td>Try It Yourself</td>
</tr>
<tr>
<td><textarea id="input" rows="10" cols="47"></textarea></td>
</tr>
<tr>
<td><input onclick="update();" type="button" value="Update"></td>
</tr>
<tr>
<td><iframe id="output" name="output" width="600" height="300" ></iframe></td>
</tr>
</table>
</div>
И следующий Javascript:
function update()
{
var tryitoutput = document.getElementById('input').value;
window.frames['output'].document.documentElement.innerHTML = tryitoutput;
}
Спасибо.
Как уже упоминалось, это происходит потому, что не может быть более одного HTML-элемента с одинаковым значением атрибута ID. В вашем случае javascript обнаруживает только первый элемент, поэтому он не работает на более поздних кнопках обновления. Самый простой подход - установить разные значения атрибута ID для разных полей "Попробуйте сами":
Немного измените свой JS, см. Следующий пример jsFiddle.
function update(tryItIndex) {
var tryItOutput = document.getElementById('input-' + tryItIndex).value;
window.frames['output-' + tryItIndex].document.documentElement.innerHTML = tryItOutput;
}
Это потому, что вы ссылаетесь на текстовое поле и вывод по id, что означает, что он всегда будет просто извлекать первый. Быстрое исправление будет иметь уникальный идентификатор для этих полей и отправить имена в качестве параметров для функции обновления, например update (inputId, outputId)
id="input"