Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   OnClick vs innerHTML (https://javascript.ru/forum/events/38570-onclick-vs-innerhtml.html)

Virrt 06.06.2013 23:05

OnClick vs innerHTML
 
Есть элемент
<div><div id='divId'>imkw</div></div>

Есть скрипт
function test() {
	  i = document.getElementById('divId');
	  i.onclick = function() { alert('WTF') }
	  // Добавляет. Все ок
	  i.parentNode.innerHTML = i.parentNode.innerHTML + 'P.S. ..';
}

test();

innerHTML грохает добавленный onclick. А нужно сделать так, чтоб все было как и до него. Подскажите пожалуйста

vadim5june 06.06.2013 23:10

а что Вы добавляете?
какой то текст?

рони 06.06.2013 23:16

Virrt,
Вариант...
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
</head>
<body>
<div><div id='divId'>imkw</div></div>
<script>
function test() {
	  i = document.getElementById('divId');
	  i.onclick = function() { alert('WTF') }
      i.parentNode.appendChild(document.createTextNode('P.S. ..'));
}
test();
</script>
</body>
</html>

Virrt 06.06.2013 23:17

Да. Текст
Не, можно и appendChild сделать. Но это план Б ) Интересно какие еще есть варианты. Может событие есть возможность вписать как-то более жестко

Virrt 06.06.2013 23:20

О. А вот document.createTextNode() я не знал. Так уже и с appendChild-ом все не по индуски выглядит. Спасибо

рони 06.06.2013 23:21

Virrt,
Делегирование событий

Deff 06.06.2013 23:25

<div><div id='divId'>imkw</div></div>
<script>
function divClick(sel) { alert('WTF') }
function test() {
	  i = document.getElementById('divId');
	  i.setAttribute('onclick','divClick(this)');
	  // Добавляет. Все ок
	  i.parentNode.innerHTML = i.parentNode.innerHTML + 'P.S. ..';
}

test();
</script>

Virrt 06.06.2013 23:27

А если добавляется не текст? Например с Аякса приходит html-страница? У меня различные условия для этой проблемы есть )

рони 06.06.2013 23:40

Virrt,
смотрите делегирование ---ссылка выше -- тоже самое для jquery -- on

вешают клик на документ и проверяют по какому элементу кликнули.

Virrt 06.06.2013 23:44

Атрибутами проблема решилась. Спасибо. И за ссылку спасибо. Освою


Часовой пояс GMT +3, время: 23:00.