Функция запускается кнопкой, но не запускается другой функцией или событием
Исходные данные
Есть кусок шаблона 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:44. |