Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.09.2016, 01:55
Новичок на форуме
Отправить личное сообщение для IndiraVarma Посмотреть профиль Найти все сообщения от IndiraVarma
 
Регистрация: 30.09.2016
Сообщений: 4

Функция запускается кнопкой, но не запускается другой функцией или событием
Исходные данные

Есть кусок шаблона 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.
Ответить с цитированием
  #2 (permalink)  
Старый 30.09.2016, 05:26
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Самое интересное:

viewTestFile = file_get_contents('view/test.html');
document.getElementById('inform').innerHTML = viewTestFile;

это краткость пояснения или так в коде и прописано?
Ответить с цитированием
  #3 (permalink)  
Старый 30.09.2016, 09:39
Новичок на форуме
Отправить личное сообщение для IndiraVarma Посмотреть профиль Найти все сообщения от IndiraVarma
 
Регистрация: 30.09.2016
Сообщений: 4

laimas,
Так и написано)
Это плохо или хорошо?
Ответить с цитированием
  #4 (permalink)  
Старый 30.09.2016, 10:08
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

IndiraVarma, это какой-то бредокод. Начнем с вопроса, функция file_get_contents() написана на JS или PHP?
Ответить с цитированием
  #5 (permalink)  
Старый 30.09.2016, 12:48
Новичок на форуме
Отправить личное сообщение для IndiraVarma Посмотреть профиль Найти все сообщения от IndiraVarma
 
Регистрация: 30.09.2016
Сообщений: 4

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
}
Ответить с цитированием
  #6 (permalink)  
Старый 30.09.2016, 14:54
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Ясно, синхронный запрос, премило.

Сообщение от IndiraVarma
то функция changeTestView() срабатывает только один раз и больше не хочет.
Так бывает, когда новым содержанием затираются какие-то элементы на которых висели какие-то события.
Ответить с цитированием
  #7 (permalink)  
Старый 30.09.2016, 14:58
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Я не смотрел на твои картинки, а сейчас посмотрел. То есть там что, кнопка в том самом куске, который обновляется и шаблонизируется?

Короче, задолбали, напишут говнокода в стайле 90-х, а задачи решают века 21-го, и хер их поймешь.

Убери все онклики, напиши нормальные функции-калбеки, повесь их на элементы и консоль тебе всю правду-матку сама зарежет.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск