Функция запускается кнопкой, но не запускается другой функцией или событием
Исходные данные
Есть кусок шаблона view/test.thml
<div class="panel panel-default">
<div class="panel-heading">
<h3 id="" class="panel-title">Название окна: {переменная.один}</h3>
</div>
<div class="panel-body">
<p>Общая информация: {переменная.два}</p>
<button class="btn btn-default" type="button" onclick="changeTestView()">Обновить информацию</button>
</div>
</div>
Есть index.html куда нужно вставить шаблон <section id="inform"></section> Теперь самое интересное
// Получаем данные из шаблона и добавляем их в элемент id="inform" в index.html
viewTestFile = file_get_contents('view/test.html');
document.getElementById('inform').innerHTML = viewTestFile;
viewTestHMTL = document.getElementById('inform').innerHTML;
var counter = 1;
// Эта функция обновляет HTML код с новыми значениями переменных
function changeTestView(){
var test1 = 'Значение переменной один: ' + counter;
var test2 = 'Значение переменной два: ' + counter;
// шаблонизатор
var str = viewTestHMTL, newstr;
newstr = str.replace(/{переменная.один}/g,test1)
.replace(/{переменная.два}/g,test);
document.getElementById('inform').innerHTML = newstr;
counter++;
}
К шаблонизатору особо вопросов не возникает. Меняет все как надо. ![]() ![]() Суть проблемы: Если функция changeTestView() вызывается через <button onclick="changeTestView()"></button> то все в порядке. Если вызываем функцию changeTestView() любой другой функцией, а также обрабатываем событие нажатие кнопки (предварительно присвоив кнопке id="buttonChange"), например вот так:
document.getElementById('buttonChange').onclick = function(){
changeTestView();
};
то функция changeTestView() срабатывает только один раз и больше не хочет. После этого другие функции тоже не могут запустить changeTestView(), а также функции, которые содержат в себе changeTestView() перестают выполняться. НО, если нажимать на такую кнопку: <button onclick="changeTestView()"></button> то фукнция changeTestView() выполняется. Второй день пытаюсь понять в чем проблема. Это за гранью моего понимания. Прошу помочь разобраться в этой проблеме. Не хочется отказываться от шаблонизатора. P.S. Раньше я не использовал шаблонизатор и менял данные присвоением к элементам id и применением на них innerHTML = 'Новое значение', но это неудобно становится слишком много id, в них начинают путаться уже, и тогда не удобно работать с шаблоном. Приходится переписывать и контролер еще. А это неправильно с точки зрения концепции MVC. |
Самое интересное:
viewTestFile = file_get_contents('view/test.html'); document.getElementById('inform').innerHTML = viewTestFile; это краткость пояснения или так в коде и прописано? |
laimas,
Так и написано) Это плохо или хорошо? |
IndiraVarma, это какой-то бредокод. Начнем с вопроса, функция file_get_contents() написана на JS или PHP?
|
warren buffet,
Используется аналог PHP функции с этого сайта.
function file_get_contents( url ) { // Reads entire file into a string
02
//
03
// + original by: Legaev Andrey
04
// % note 1: This function uses XmlHttpRequest and cannot retrieve resource from different domain.
05
06
var req = null;
07
try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {
08
try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {
09
try { req = new XMLHttpRequest(); } catch(e) {}
10
}
11
}
12
if (req == null) throw new Error('XMLHttpRequest not supported');
13
14
req.open("GET", url, false);
15
req.send(null);
16
17
return req.responseText;
18
}
|
Ясно, синхронный запрос, премило.
Цитата:
|
Я не смотрел на твои картинки, а сейчас посмотрел. То есть там что, кнопка в том самом куске, который обновляется и шаблонизируется?
Короче, задолбали, напишут говнокода в стайле 90-х, а задачи решают века 21-го, и хер их поймешь. Убери все онклики, напиши нормальные функции-калбеки, повесь их на элементы и консоль тебе всю правду-матку сама зарежет. |
| Часовой пояс GMT +3, время: 23:00. |