Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 13.07.2012, 13:53
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от vadim5june
в innerHTML входит все что видно нам по alert(document.body.innerHTML)
таким образом все обработчики которые мы сделали скриптами там не видны и не войдут в страницу когда мы будем использовать innerHTML+ а войдут только те обработчики которые мы написали на странице
Вот это совсем не понял, все обработчики как раз входят в исходный текст страницы (если бы не входили, не сработал бы обработчик клика у самого body, а он срабатывает)

<body>
<button id="button">click</button><br>
<script>
document.body.onclick = function () {
  document.body.innerHTML +=  'text<br>';
  alert(document.body.innerHTML);
}
document.getElementById('button').onclick = function () {
  alert('click')
}
</script>
</body>
Ответить с цитированием
  #12 (permalink)  
Старый 13.07.2012, 14:00
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от vadim5june
но лучше с помощью appendChild
Написал свой код, используя documentFragment - может быть, поможет.
<!DOCTYPE html>

<html><head><title></title></head><body>

<script type="text/javascript">
var user = [[1,'name1', 'lastname1', 'vozrast1'],[2, 'name2', 'lastname2', 'vozrast2'],[3, 'name3', 'lastname3', 'vozrast3']];
var frag=document.createDocumentFragment(), cns=frag.childNodes;
for (var i=0; i<user.length; i++) {
  frag.appendChild(document.createTextNode(""));
  frag.appendChild(document.createElement("br"));
}
function fff(i) {
  function sName(a, b) {
    if (a[i] > b[i]) return 1;
    else if (a[i] < b[i]) return -1;
    else return 0;
  }
  user.sort(sName);
  for (i=0; i<user.length; i++)
    cns[2*i].textContent=user[i];
  document.getElementById("result").appendChild(frag.cloneNode(true));
}
</script>
<a href="#" onClick="fff(0)">id</a>
<a href="#" onClick="fff(1)">name</a>
<a href="#" onClick="fff(2)">lastname</a>
<a href="#" onClick="fff(3)">vozrast</a>
<div id="result"></div>

</body></html>

Последний раз редактировалось oneguy, 13.07.2012 в 14:12.
Ответить с цитированием
  #13 (permalink)  
Старый 13.07.2012, 14:14
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от bes Посмотреть сообщение
Вот это совсем не понял, все обработчики как раз входят в исходный текст страницы (если бы не входили, не сработал бы обработчик клика у самого body, а он срабатывает)
Я так это понимаю
когда выполнился первый раз скрипт то у нас появилось два обработчика на элементах body и button
эти обработчики не здесь на странице располагаются а записываются во внутренние таблицы интерпретатора javascript
когда мы выполняем команду innerHTML+ то элемент body не трогаем так как только внутри меняем а элемент button заменяем на новый но при этом указатель обработчика указывает на старый button(который у нас удалился) и не срабатывает
но еще мы перезаписываем снова тот же скрипт-но он не выполняется-поэтому события не перепишутся
Ответить с цитированием
  #14 (permalink)  
Старый 13.07.2012, 14:45
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Да, это наверное может объяснить ситуацию: при изменении содержимого body всё, что в тегах <script></script> внутри этого body заново не анализируется.
Решением может стать переназначение обработчиков (ну или как уже сказали не стоит это вообще использовать).

<body>
<button id="button">click</button><br>
<script>
document.body.onclick = function () {
  document.body.innerHTML +=  'text<br>';
  document.getElementById('button').onclick = function () {
   alert('click')
  }
}
document.getElementById('button').onclick = function () {
  alert('click')
}
</script>
</body>
Ответить с цитированием
  #15 (permalink)  
Старый 13.07.2012, 15:25
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от oneguy Посмотреть сообщение
Написал свой код, используя documentFragment - может быть, поможет.
Да это правильный подход я считаю
inerrHTML+ лучше не использовать
Ответить с цитированием
  #16 (permalink)  
Старый 14.07.2012, 20:25
Новичок на форуме
Отправить личное сообщение для f-mobile Посмотреть профиль Найти все сообщения от f-mobile
 
Регистрация: 13.07.2012
Сообщений: 5

Сообщение от vadim5june Посмотреть сообщение
document.body.innerHTML+=user[0]+"<br>"+user[1]+"<br>"+user[2];

но лучше с помощью appendChild
с этом document.body.innerHTML+=user[0]+"<br>"+user[1]+"<br>"+user[2];нормально работает, но каждый раз нажатие кнопки еще +добавляется user[0]+"<br>"+user[1]+"<br>"+user[2]. значить reset; неправильно подставил?, место его чего использовать можно?
Ответить с цитированием
  #17 (permalink)  
Старый 14.07.2012, 20:30
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

попробуй так после
<a href="#" onClick="fff(3)">vozrast</a>
добавь
<div id="d1"></div>
и в скрипте
document.getElementById('d1').innerHTML=user[0]+"<br>"+user[1]+"<br>"+user[2];

Последний раз редактировалось vadim5june, 14.07.2012 в 21:26.
Ответить с цитированием
  #18 (permalink)  
Старый 14.07.2012, 21:03
Новичок на форуме
Отправить личное сообщение для f-mobile Посмотреть профиль Найти все сообщения от f-mobile
 
Регистрация: 13.07.2012
Сообщений: 5

пробовал не получается
<div id="d1">
<a href="#" onClick="fff(0)">id</a>
<a href="#" onClick="fff(1)">name</a>
<a href="#" onClick="fff(2)">lastname</a>
<a href="#" onClick="fff(3)">vozrast</a>
</div>

<script type="text/javascript">

var user = [[1,'name1', 'lastname1', 'vozrast1'],[2, 'name2', 'lastname2', 'vozrast2'],[3, 'name3', 'lastname3', 'vozrast3']];
function fff(i){

function sName(a, b) {
if (a[i] > b[i]) return 1;
else if (a[i] < b[i]) return -1;
else return 0;
}user.sort(sName);
document.getElementById('d1').innerHTML+=user[0]+"<br>"+user[1]+"br>"+user[2];
reset;
}
</script>
Ответить с цитированием
  #19 (permalink)  
Старый 14.07.2012, 21:08
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от f-mobile Посмотреть сообщение
пробовал не получается
<div id="d1">
<a href="#" onClick="fff(0)">id</a>
надо так
<div id="d1"></div>
<a href="#" onClick="fff(0)">id</a>
Ответить с цитированием
  #20 (permalink)  
Старый 14.07.2012, 21:13
Новичок на форуме
Отправить личное сообщение для f-mobile Посмотреть профиль Найти все сообщения от f-mobile
 
Регистрация: 13.07.2012
Сообщений: 5

так и не получилось
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SyntaxHighlighter подсветка при нажатии faraday Общие вопросы Javascript 3 31.03.2012 23:43
Получение данных строки грида при нажатии сторонней кнопки Allan Stark ExtJS 4 17.11.2011 19:21
Событие onClick при нажатии пункта меню Lex4e Общие вопросы Javascript 1 25.06.2010 18:31
При нажатии и удержании мыши заменяется картинка Webroller Events/DOM/Window 9 26.05.2010 16:00
Как сделать так, чтобы JS при нажатии на кнопку не выполняла запрос со страницы. JSProgrammer Элементы интерфейса 3 18.05.2010 20:18